Linux

為什麼我的 dd Full Disk Copy 在 8 GB 時一直失敗?

  • December 4, 2021

我正在嘗試將 500 GB SSD 複製到 1TB SSD。由於某種原因,當正在複製的數據達到 8GB 時,它會一直失敗。這是我嘗試過的第三個 1TB SSD,它們都卡在同一個地方。我執行了以下命令:

dd if=/dev/sda of=/dev/sdb bs=1024k status=progress

我還嘗試使用 Clonezilla 複製驅動器,但在同一位置失敗。我使用 GParted 重新格式化驅動器並將其設置為 EXT4 文件系統,但它仍然卡在同一個位置。sda 是內部的,sdb 是外部插入的。

我得到的錯誤說:

7977443328 bytes (8.0 GB, 7.4 GB) copied, 208s, 38.4 MB/s
dd: error reading '/dev/sda': Input/output error
7607+1 records in
7607+1 records out

感謝@roaima 提供以下答案。我能夠執行ddrescue,它複製了大部分數據。我取出內部 SSD 並通過 USB3 將新舊 SSD 連接到 CentOS 盒子。我執行了以下內容:

ddrescue -v /dev/sdb /dev/sdc tmp --force

它執行了15個多小時。一夜之間就停了。但好在當我再次執行命令時,它又從中斷的地方恢復了。

我使用screen這樣我就不會第二次被鎖定在一個會話中:)。我曾經Ctrl+c在 99.99% 的數據被救出後退出 ddrescue 命令,因為它在那裡掛了幾個小時。我能夠從新驅動器啟動並且它啟動了。這是我退出 ddrescue 的狀態:

Initial status (read from mapfile)
rescued: 243778 MB, tried: 147456 B, bad-sector: 0 B, bad areas: 0

Current status
    ipos:  474344 MB, non-trimmed:    1363 kB,  current rate:       0 B/s
    ipos:  474341 MB, non-trimmed:        0 B,  current rate:       0 B/s
    opos:  474341 MB, non-scraped:   522752 B,  average rate:   8871 kB/s
non-tried:        0 B,  bad-sector:   143360 B,    error rate:       0 B/s
 rescued:  500107 MB,   bad areas:      123,        run time:  8h  1m 31s
pct rescued:   99.99%, read errors:      354,  remaining time:     14h 31m
                             time since last successful read:      6m  7s
Scraping failed blocks... (forwards)^C
 Interrupted by user

希望這對其他人有幫助。我認為我的舊驅動器開始出現故障。希望沒有數據失去。現在開始調整 LUKS 分區的大小:)

錯誤是 ,dd: error reading '/dev/sda': Input/output error它告訴您問題是讀取源磁碟而不是寫入目標磁碟。您可以根據需要多次更換目標磁碟,但這不會解決讀取源的問題。

與其使用dd,不如考慮在磁碟完全當機之前將數據從磁碟中拯救出來。使用類似rsync或複製文件cp,或使用複製圖像ddrescue

ddrescue -v /dev/sda /dev/sdb /some/path/not/on/sda_or_sdb

最後一個參數指向一個相對較小的臨時文件(地圖文件),它既不在/dev/sda也不在/dev/sdb。如果您沒有其他東西,它可能在外部 USB 記憶棒上。

ddrescue命令了解源磁碟可能有故障。它一次讀取相對較大的塊,直到遇到錯誤,然後標記該部分以進行更仔細的檢查和較小的複制嘗試。映射文件用於在源磁碟鎖定並且必須重新啟動系統的情況下允許重新啟動和繼續。它會盡最大努力複製它所能複制的一切。

複製磁碟後,您的/dev/sdb分區似乎僅對應於原始磁碟的大小。之後您可以使用fdiskgparted/parted來修復它。

如果您在複製數據時出錯,您應該首先使用其中一個fsck系列來檢查和修復分區。例如,e2fsck -f /dev/sdb1

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