GentooシステムのDVDにいくつかのバックアップを書き込むスクリプトがあります。
最初はファイルを収集し、ISOイメージを作成し、cdrecordを使用してイメージをディスクに焼き付けました。
書き込みプロセスが完了したら、作成したDVDをマウントし、ISOイメージをマウントしてファイルとサイズを比較しようとします。
問題は、最初にDVDを取り出さないとDVDを再生できないことです。
残念ながら、私のシナリオでは、小さなポータブルUSB DVDRWがあるため、DVDを再インポートすることはできません。
この問題をどのように処理するかについてのアイデアはありますか?
答え1
lsscsiを使用してDVDドライブのscsi IDを確認します。 (私は数字に「A」、「B」、「C」、「D」を使用します)
# lsscsi
[0:0:0:0] disk ATA SAMSUNG MZNLN512 1L6Q /dev/sda
[A:B:C:D] cd/dvd PLDS DVD-RW DU8A6SH DU53 /dev/sr0
デバイスを削除
# echo 1 > /sys/class/scsi_device/A\:B\:C\:D/device/delete
デバイスを再ロードします。以下の例では、「hostA」Aは上記のlsscsi行から来ます。
# echo 'B C D'> /sys/class/scsi_host/hostA/scan
答え2
これは、書き込みプログラムとLinuxカーネルの間の既知の問題です。カーネルは SG_IO ioctl をレコーダデバイスにのみ渡し、デバイスの内容が変更されたことを認識しません。したがって、対応するデバイス状態モデルとデータバッファは古い状態のままです。
メディアをリロードする以外に、カーネルにメディアを再評価させる信頼できる方法がわかりません。 Orionが提案したudevadmトリガーが役立つ場合は、正しいコマンドテキストを知りたいです。
ISO 9660ファイルシステムの場合、xorrisoはSG_IO ioctlを介してファイルの実際の内容を読み取ってファイルを比較できます。
xorriso -for_backup -indev /dev/sr0 -compare_r /disk/path1 /iso/path1 -compare_r /disk/path2 /iso/path2 ...more.compare_r...
/iso/pathXの代わりに/disk/pathXを使用して、ハードディスクとISOのディレクトリツリーパスを比較します。
-for_backup コマンドの実行中に xorriso を使用して ISO を生成する場合、または --for_backup オプションで xorrisofs を使用する場合に便利です。
xorrisofs --for_backup ...mkisofs.arguments...
これらのISOは次のように確認できます。
xorriso -for_backup -indev /dev/sr0 -check_md5_r申し訳ありません/--