Rhel

我怎樣才能只 dd 尚未開發/歸零的驅動器的最後一部分

  • December 22, 2021

當出現讀/寫或校驗和錯誤出現問題時,我會定期 dd 一個驅動器來擦除它們以用於 ZFS resilver,以使驅動器重新投入使用。通常,在開始時刪除分區表不足以使 ZFS無法辨識驅動器。

我想在開始時刪除兩個分區表(已經知道如何做到這一點,這已經足夠記錄了),以及 3TB 驅動器末尾的分區表,並測試它是否有效。如何僅刪除最後一個分區表(gpt)?

現在我的主要問題。我已經執行dd然後在某個時候取消它(見下文),以測試 ZFS 是否不再辨識它;這還不夠——ZFS 仍然可以辨識它並再次將其置於降級模式。

$ dd if=/dev/zero of=/dev/disk/by-id/scsi-35000c50084818db7
^C726443929+0 records in
726443928+0 records out
371939291136 bytes (372 GB) copied, 7997.73 s, 46.5 MB/s

所以現在我只想尋找過去的 372GB 和之後的 dev/zero,這樣就不會浪費時間和硬碟壽命再次做第一個 372GB。

我在想這樣的事情,但它沒有用。

$ dd if=/dev/zero of=/dev/disk/by-id/scsi-35000c50084818db7 seek=371G
dd: ‘/dev/disk/by-id/scsi-35000c50084818db7’: cannot seek: Invalid argument
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000238797 s, 0.0 kB/s

查看文件是一件真正的苦差事。這個頁面幾乎看起來很有幫助https://wiki.linuxquestions.org/wiki/Some_dd_examples,但我沒有看到我需要的東西。

我只是缺少塊大小,還是缺少什麼不起作用?我嘗試添加conv=notrunc到上面的那一行,但沒有幫助。

to的seek參數dd是要尋找的輸出塊的數量

如果沒有bs=obs=在您的命令中,預設為 512 字節

您可以看到726443928已寫入塊

最簡單的解決方案是在搜尋中使用該數字

dd if=/dev/zero of=/dev/disk/by-id/scsi-35000c50084818db7 seek=726443928

順便說一句,您連結到的文件非常清楚地說明了這一點

在寫入之前, Seek 會跳過輸出媒體上的許多


擦除輔助 GPT

輔助 GPT 表位於磁碟末尾的 33 個扇區(512 字節扇區)

所以,如果fdisk -l /dev/disk/by-id/scsi-35000c50084818db7報告

Disk /dev/disk/by-id/scsi-35000c50084818db7: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors

然後從 5860533168 中減去 33 =5860533135

dd if=/dev/zero of=/dev/disk/by-id/scsi-35000c50084818db7 skip=5860533135

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