Mac OS X'te neden “/ dev / rdisk”, “/ dev / disk” ten 20 kat daha hızlı?


129

Göre rasbery pi belgelerinde , Sen / dev / disk veya / dev / rdisk biriyle flash kartına OS yükleyebilirsiniz.

rdisk, ham disk anlamına gelir.

/ dev / disk blok seviyeli bir cihazdır, neden rdisk 20 kat daha hızlı olsun ki?

Mac OSX’i kullanma

Not: OS X'te her diskin / dev içerisinde iki yol referansı olabilir: / dev / disk #, arabelleğe alınmış bir aygıttır; / dev / rdisk #, dd programını kullanırken çok daha hızlı ve tamamen OK olan ham bir yoldur. Sınıf 4 SD kartta fark, rdisk yolu kullanılarak yaklaşık 20 kat daha hızlıydı.


3
Bir not olarak, bir test yaptım ve rdisk aslında çok daha uzun sürdü.
spuder

4
Başka bir not olarak, o zaman da test etmek zorunda olduğumu hissettim ve bir rdisk kopyasının (dd üzerinden) disk karşılığı kullanmaktan neredeyse 4 kat daha hızlı olduğunu gördüm.
Travis Griggs,

Mac OSX 10.9.1 (MacBook Pro 15-inç, 2011 Başı)
Travis Griggs

2
Okuduğum bir Raspberry Pi SD kart görüntüsünün bazı talimatlarında "rdisk" yazım hatası olduğunu düşündüm. Daha fazla araştırma üzerine fark googled ve bu konu bulundu. Benim durumumda / dev / disk yerine / dev / rdisk kullanarak bir SD karta 1,7GB görüntü yazmak 13 kat daha hızlı oldu! Macbook Pro Retina 13 ", 2015 yılı başlarında.
tobias.mcnulty

2
Bir başka yazı tahtası olarak, yeni satın aldığım Sandisk Extreme Pro MicroSD kartına bir Ubuntu ARM görüntüsü ekledim. / dev / disk1 2.3 MB / s, / dev / rdisk1 ise 83.7 MB / s veya 36.4 kat daha hızlı yazdı.
DanielSmedegaardBuus

Yanıtlar:


93

Kimden man hdiutil:

/ dev / rdisk düğümleri karaktere özel aygıtlardır, ancak BSD anlamında "ham" olur ve blok hizalanmış G / Ç'ye zorlar. Fiziksel diske arabellek önbelleğinden daha yakındırlar. / dev / disk düğümleri ise blok özel aygıtlara tamponlanır ve esas olarak çekirdek dosya sistemi kodu tarafından kullanılır.

Layman'ın terimlerinde /dev/rdiskneredeyse doğrudan diske /dev/diskgider ve daha uzun ve daha pahalı bir rotadan geçer


14
rdisk'i kullanabiliyorken neden disk kullanmalıyım?
user391339,

20
@ user391339 Çünkü önbellek hala istenen bir şey. Çıkarılabilir medyanızın olduğu durumlarda, verileri başka bir fiziksel konumda olmasını istediğiniz için fiziksel cihazdaki verileri olabildiğince hızlı bir şekilde almak istersiniz. Dahili sabit diskler farklı bir hikaye. Genelde onları taşımazsınız, bu nedenle verilerin cihaza ne zaman yazıldığını önemsemezsiniz. Diske yazmanın daha pahalı bir yolu olan aygıtlara yazılan / okunan verileri önbelleğe aldığınızda, ancak programlarınız hala daha hızlıdır, çünkü yazmak istedikleri tüm verilerin diske yazılmasını beklemelerine gerek yoktur.
Kritzefitz

@Dan, Re "kuvvet"; anlam?
Pacerier

Krit'in açıklamasının benim için çalıştığından emin değilim. Benim durumum biraz büyük harici disk bir kerelik tarama yapmak isteyen özel olabilir ve bunun için hangi yöntemin daha iyi çalıştığından emin değilim, ancak aksi halde normal kullanımda hala iyi olduğumu ve bunun yaygın olduğu gibi çıkarılmasını beklemiyorum uygulama. Ancak Windows'ta, beklenmedik bağlantı kaybı olaylarında daha az dosya sistemi bozulması bildirdiği için her zaman Mac'in daha "ham" modunu yansıttığını düşündüğüm 'hızlı çıkarma' profilini tercih ettim.
Pysis

96

Kabul edilen cevap doğru, ancak fazla ayrıntıya girmiyor.

Kullanıcı alanından eriştiğinizde /dev/diskve arasındaki önemli farklardan biri tamponlanmış olmasıdır. Okuma / yazma yolu , G / Ç'yi arabellek önbelleğine okuyan 4 KB'lik parçalara böler ve ardından kullanıcı alanı arabellekine kopyalar (ve sonraki 4KB okumasını yayınlar…). Bu, hizalanmamış okuma ve yazma yapabilmeniz açısından güzeldir ve sadece işe yarar. Buna karşılık, temel olarak okuma veya yazma işlemlerini doğrudan cihaza aktarır, bu da G / Ç'nin başlangıç ​​ve bitişinin sektör sınırlarıyla aynı hizada olması gerektiği anlamına gelir./dev/rdisk/dev/disk/dev/disk/dev/rdisk

Bir sektörden daha büyük bir okuma veya yazma yaparsanız /dev/rdisk, bu istek doğrudan iletilir. Alt katmanlar ayrılabilir (örneğin, USB, USB protokolündeki maksimum yük kapasitesi nedeniyle 128 KB'lik parçalara ayrılır), ancak genellikle daha büyük ve daha verimli G / Ç'ler elde edebilirsiniz. dd128 KB ile 1 MB arasındaki akış gibi yayın akışları mevcut RAID dışı donanımlarda en iyi performansı elde etmek için oldukça iyi boyuttadır.

Önbellek /dev/diskokuma ve yazma yolları tarafından yapılan çok basit ve neredeyse beyin öldü. Kesinlikle gerekli olmasa bile önbelleklenir; Cihaz hafızayı haritalandırabilir ve doğrudan uygulamanızın arabelleğine aktarabilirse. Küçük başına (4KB) G / Ç yapar, bu da G / Ç başına yüke yol açar. İleride okuma yapmaz veya arkasına yazmaz.


6

Sabit görünüyor /dev/diskve /dev/rdiskHDD'ler ve SSD'ler için farklı çalışıyor. MicroSD kart için kontrol etmek istiyorum. Sandisk Ultra MicroSD 64GB'a 2GB disk görüntü yazdım ( https://www.amazon.com/gp/product/B073JYVKNX ).

Tekrarlanan çeşitli testler kez, ama sonuç stabil: 17MB / sn için /dev/diskvs 20MB / sn için /dev/rdisk. Değişen bs=1miçin bs=16mkesinlikle yazma hızı açısından fark verir.

  1. Yazıyor /dev/disk2

    sudo dd if=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img of=/dev/disk2 bs=1m
    2094006272 bytes transferred in 121.860007 secs (17183704 bytes/sec)
    
  2. Yazıyor /dev/rdisk2

    $ sudo dd if=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img of=/dev/rdisk2 bs=1m
    2094006272 bytes transferred in 102.743870 secs (20380839 bytes/sec)
    

Sonra okuma hızını test etmeye karar verdi: 26MB / sn için /dev/diskvs 87MB / sn için /dev/rdisk. Değişen bs=1miçin bs=16mkesinlikle okuma hızı açısından fark verir.

  1. Dan okuma /dev/disk2

    sudo dd if=/dev/disk2 of=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531-2.img bs=1m
    257949696 bytes transferred in 9.895572 secs (26067184 bytes/sec)
    
  2. Dan okuma /dev/rdisk2

    $ sudo dd if=/dev/rdisk2 of=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img bs=1m
    877658112 bytes transferred in 10.021974 secs (87573377 bytes/sec)
    

2

Bunun eski bir iş parçacığı olduğunu biliyorum, ancak diğer insanlar denediklerimin hız etkileriyle ilgilenebilirler. Hem MacOS hem de BOOTCAMP bölümlerini yakalamak isteyen MacBook Pro 13 "Retina (Silikon Gücü 1 TB SSD ile) harici bir USB 3.0 2.5" sabit disk sürücüye dahili SSD'mi yedeklemek istiyorum. İlk komut satırım şuydu:

sudo dd if=/dev/disk0 of=/dev/disk2 bs=1m

Sonuçlar ~ 31.3 MB / saniye kopya hızında yapıldı. Bu beni bekletmek için çok uzundu. Böylece, ikinci denemede, komut satırı:

sudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m

Kullanma /dev/rdiskyerine /dev/diskyaklaşık 98.4 MB / saniyeye, işler daha hızlandırdı! Ancak, daha da iyi olur. Böylece, üçüncü deneme için bu komut satırını kullandım:

sudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m conv=sparse

Seyrek seçenek, DD'ye girişte tümü 0 olan çıkış bloklarına yazı yazmamalarını söyler. İşin güzel yanı, diskin "tam" alanlarının ortasında bile olsa, düşündüğünüzden çok daha hızlı olması. Dolu olmayan herhangi bir sürücüde, DD'leri daha da hızlandıran devasa 0 parçalara sahip olacaksınız. Şimdiye kadar, en azından, DD neredeyse sabit diskimin teorik aktarım hızında çalışıyor: ~ 116.4 MB / saniye, ve henüz bu geniş alanlara ulaşmadı.

Bu seçenekleri bir deneyin - işe yarıyor! Lütfen dikkat: Dikkatlice değiştirin if=ve  of=(Mac'ler için) tarafından listelenen doğru sürücüleri doğru şekilde işaretleyin:

diskutil list

1
conv=sparseDosyaları kopyalarken harika    Ben kopyalarken yolsuzlukla tanıtmak edebileceğinden endişe olurdu , bütün bir disk bir bölümü veya bir  dosya sistemi , hedef diski sıfır başka bir şey içerdiğini% 100 kesinlikle bilmedikçe.
G-Man

1

Kayıt için, macOS Yüksek Sierra'da en azından / dev / disk / dev / rdisk'ten çok daha hızlı görünüyor. Dd veya ddrescue çalıştığında, manyetik bir HD'den bir SSD'ye aktarma işlemim karşılaştırması / dev / rdisk kullanarak 3.7 MB / sn / dev / disk kullanarak 45 MB / sn idi. Bu nedenle, macOS'un sonraki sürümlerinde, en iyi performans için / dev / rdisk yerine / dev / disk kullanmak en iyisi olabilir.


2
4.6 GB'lık raspbian-stretch görüntüyü dahili SSD depolama biriminden dd ve 1 MB / dev / rdisk bs'ye sahip bir SD karta yazarken macOS 10.13.2 çalıştıran 2013'ün sonundaki macbook pro'da / dev / disk'ten çok daha hızlı bir performans sergiliyor. / Dev / disk kullanarak 27.16 dakika ve / dev / rdisk kullanarak yalnızca 5.18 dakika sürdü.
digitaladdictions

@digitaladdictions son macOS'ta birkaç test daha yaptı: superuser.com/a/1346063/126537
k06a

0

Bence hangi yol düğümünün daha hızlı olduğunu veya seri testlere daldığını iddia etmeden önce. Son okuma / yazma hızını önemli ölçüde etkileyen diğer faktörleri göz önünde bulundurmalıyız.

Micro SD kart spec, sınıf 4/10 / HC I ... sd kart okuyucu çipi ve arayüzü, usb 1.1 / 2.0 / 3.0 / 3.1 os toplam bellek / boş bellek, işletim sistemi, sabit disk tipi, HDD / SSD, HDD dönüş hızı ve önbellek boyutu, SSD boyutu / önbellek / boş alan / os harddisk arayüzü, ata / sata / esata,

Herhangi bir faktörün bir darboğaz olması durumunda, yanlış sonuç alacağız.

işte sonuç: osx 10.12.6, ssd,

USB 2.0 kartı ile microSD 16G'yi okuyun ve harici 3.0 inç HDD'ye usb 3.0 ile okuyun ve yazın

15193+1 records in
15193+1 records out
15931539456 bytes transferred in 1423.067033 secs (11195214 bytes/sec)

microSD 32G'yi dahili kart okuma yoluyla yazın ve veri kaynağı, USB 3.0 ile harici 3.5 inç HDD'dir,

0+253945 records in
0+253945 records out
15931539456 bytes transferred in 440.093686 secs (36200336 bytes/sec)

Görüyorsun, yazma hızı> okuma hızı !!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.