Backup
比較兩個文件,同時覆蓋第二個文件的大小
我正在嘗試驗證使用以下命令進行的備份:
dd if=/dev/sda of=/dev/sdc2
我將
/dev/sda
(內部硬碟驅動器)的內容備份到/dev/sdc2
(外部備份驅動器,通過USB連接),但是/dev/sdc2
(正在備份的分區/dev/sda
)略大於/dev/sda。我無法
/dev/sdc2
確定大小,/dev/sda
因為字節大小/dev/sda
不能被 4096 整除,4096 是驅動器上的扇區大小/dev/sdc
。我想知道 diff (Unix命令)是否會讓你假設
/dev/sdc2
大小為/dev/sda
(僅比較前 x 個字節,(x 是 )的大小/dev/sda
)/dev/sdc2
我想驗證這一點的原因是,當我在執行
dd
(然後diff /dev/sda /dev/sdc2
)時,系統日誌中出現錯誤。我跑了 diff
/dev/sda
/dev/sdc2
,它說設備不同,可能是因為/dev/sdc2
大於/dev/sda
.錯誤(每隔一段時間重複一次,數量不等)看起來像這樣:
ata5.00: exception Emask 0x50 SAct 0x0 SErr 0x280900 action 0x6 frozen ata5.00: irq_stat 0x08000000, interface fatal error ata5: SError: { UnrecovData HostInt 10B8B BadCRC } ata5.00: failed command: READ DMA ata5.00: cmd c8/00:00:e0:57:f9/00:00:00:00:00/e9 tag 4 dma 131072 in res 50/00:00:df:57:f9/00:00:09:00:00/e9 Emask 0x50 (ATA bus error) ata5.00: status: { DRDY } ata5: softreset failed (device not ready)
我正在執行此操作的電腦正在執行 Arch Linux 的 ISO 版本(安裝程序),目前未連接到網際網路(稍後會)。我應該嘗試不同的 Linux 發行版嗎?
在這種情況下也許
cmp
就足夠了:SYNOPSIS cmp [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]] DESCRIPTION Compare two files byte by byte. (...) -n, --bytes=LIMIT compare at most LIMIT bytes
您需要將源設備的大小(以字節為單位)作為參數傳遞給
cmp -n
,它blockdev --getsize64
可以計算:cmp --bytes=$(blockdev --getsize64 /dev/sda) /dev/sda /dev/sdc2
但是請注意,您粘貼的錯誤消息似乎表明實際的讀取錯誤,因此您可能面臨數據的實際問題,而不僅僅是與
diff
操作方式有關的問題。