それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

mac のdd / ddrescue が遅すぎる大問題に対処する。

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/

参考