Backup

比較兩個文件,同時覆蓋第二個文件的大小

  • February 21, 2017

我正在嘗試驗證使用以下命令進行的備份:

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操作方式有關的問題。

引用自:https://unix.stackexchange.com/questions/248000