mac で ddするとめっちゃ遅い
本当に遅い。
信じられないくらいに遅い。2MB/s程度しか出ない。32GBのraspi のSDカードをコピーに一晩中掛かってしまった。辟易した。調べたら mac はもともと遅いらしい・
rdisk を使う
mac の /dev/diskX は遅すぎるので、raw モードで読み書きすると早くなる
/dev/disk → /dev/rdisk
raw で読み書きすると本当に早くなる。2M/s → 30M/s になり、ちゃんとマイクロSDの速度になった。
例。次のようになります。
rdisk と disk で違いがあるのがわかると思います。
sudo ddrescue raspbian-2020-01-13.img /dev/disk3s2 sudo ddrescue raspbian-2020-01-13.img /dev/rdisk3s2
これ、知らないと本当にハマるよね。
速度の違い
/dev/disk は 1.7MB/s で /dev/rdisk へは 38MB/s である。桁違いとはこのことだ。
takuya@Downloads$ sudo ddrescue raspbian-2020-01-13.img /dev/disk3s2 --input-position=$(( 512*94208 )) --size=16G --force 2020-01-13.dd.mapfile GNU ddrescue 1.24 Press Ctrl-C to interrupt ipos: 4024 MB, non-trimmed: 0 B, current rate: 917 kB/s opos: 4024 MB, non-scraped: 0 B, average rate: 1766 kB/s non-tried: 12023 MB, bad-sector: 0 B, error rate: 0 B/s rescued: 3976 MB, bad areas: 0, run time: 37m 30s pct rescued: 24.85%, read errors: 0, remaining time: 1h 53m time since last successful read: n/a Copying non-tried blocks... Pass 1 (forwards)^C
takuya@Downloads$ sudo ddrescue raspbian-2020-01-13.img /dev/rdisk2s2 --input-position=$(( 512*94208 )) --size=16G --force 2020-01-13.dd.mapfile GNU ddrescue 1.24 Press Ctrl-C to interrupt Initial status (read from mapfile) (sizes limited to domain 48234496 B to 16048234496 B of 32010928128 B) rescued: 3976 MB, tried: 0 B, bad-sector: 0 B, bad areas: 0 Current status ipos: 5962 MB, non-trimmed: 0 B, current rate: 32636 kB/s opos: 5962 MB, non-scraped: 0 B, average rate: 37271 kB/s non-tried: 10085 MB, bad-sector: 0 B, error rate: 0 B/s rescued: 5914 MB, bad areas: 0, run time: 52s pct rescued: 36.96%, read errors: 0, remaining time: 4m time since last successful read: 0s
てか、raw モード以外で読み書きすると、なんでこんなに遅いのmacOSは・・・
mac で ddするときは rdisk
mac でdd するときは、rdisk を使ってraw モードで読み書きしよう。
mac のブロックデバイスへのアクセスは遅すぎる。たぶんFSEVENTとかnotify 系に通知しまくるんだろう。mac のdocker が遅いのとも、似たような理由なのかもしれない。
/dev/disk と /dev/rdisk の違いはランダムアクセスとシーケンシャルアクセスの考え方の違いで、バッファを経由して他のプロセスと共有するかどうかってことらしい。
https://www.junk-works.science/disk-and-rdisk/