書き込み後にDVDを取り出さずにマウント

書き込み後にDVDを取り出さずにマウント

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申し訳ありません/--

関連情報