私はUSBに約5MBのISOと小さなOS、そして独自のgrubを保存しています。デバイスを接続して確認するとsudo fdisk -l次のような結果になります:
...
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 1 9551 9551 4.7M cd unknown
ddでISOをコピーするとsudo dd if=my_os.iso of=/dev/sdb
14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.538487 s, 14.1 MB/s
完璧に動作します。他のPCのBIOSから起動します。
問題は、BIOS を更新した後に USB を接続するのを忘れることがあるため、USB を接続せずに ff を実行すると、出力は次のようになることです。
14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.00987684 s, 770 MB/s
現在、/dev/sdb レジスタが破損しており、コピー速度 (770 MB/秒) は意味をなさず、再起動するまで dd を再度使用することはできません。
ddrescueで修復しようとしましたが、うまくいきませんでした
sudo ddrescue /dev/zero /dev/sdb conv=noerror,sync
私の質問は、正確に何が起こっているのか、そして可能であれば、再起動を回避して dd が再び動作し始めるように /dev/sdb を修復するにはどうすればよいのかということです。
ありがとう。
答え1
デバイスノードは/dev/sd*
/devにのみ表示されますデバイスが接続された後、それ以前ではありません。(また、それらは「レジスタ」とは呼ばれません。)したがって、実行したときにdd of=/dev/sdb
実際にはデバイスには触れませんでした。代わりに、出力ファイルが存在しなかったため、dd
作成したその名前の新しいファイル。
$ sudo dd if=archlinux-2016.04.01-dual.iso of=/dev/sdc 1482752+0 件のレコード 1482752+0 件のレコードが出力されました 759169024 バイト (759 MB、724 MiB) がコピーされました。0.941926 秒、806 MB/秒 $ ls -l /dev/sd* brw-rw---- 1 ルートディスク 8, 0 6月15日 08:54 /dev/sda brw-rw---- 1 ルートディスク 8、16 6月 15 14:14 /dev/sdb -rw-r--r-- 1 ルート ルート 724M 6月15日 15:06 /dev/sdc
つまり、実際には「破損」しているものはなく、「修復」や ddrescue を実行する意味もありません。 という名前の巨大なファイルがあるだけで/dev/sdb
、このファイルが存在するため、カーネルはそこに実際のデバイス ノードを作成できません。
(書き込み速度は完全に理にかなっています。RAM/dev
に保存されるので、キャッシュされた RAM から /dev が存在する RAM にイメージをコピーしただけです。)
/dev/sdb
デバイスを削除して再接続すると、本物デバイス ノードが再表示されます。