Ext4

嘗試打開 /dev/sda2 時的短讀

  • July 31, 2016

我剛剛將主機上的 .vdi 從 15.5G 調整為 120G。我嘗試使用來賓(ubuntu伺服器)調整分區大小resize2fs

root@ubuntu:~# sudo resize2fs /dev/sda2 115G
resize2fs 1.42.13 (17-May-2015)
resize2fs: Attempt to read block from filesystem resulted in short read while trying to open /dev/sda2
Couldn't find valid filesystem superblock.

現在,據我了解的情況/dev/sda2是腐敗。但是,我的伺服器虛擬機仍然可以正常工作,並且在分區上執行沒有問題。fdisk -l /dev/sda輸出:

Disk /dev/sda: 120 GiB, 128849018880 bytes, 251658240 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x32955267

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048   999423   997376  487M 83 Linux
/dev/sda2       1001470 33552383 32550914 15.5G  5 Extended
/dev/sda5       1001472 33552383 32550912 15.5G 8e Linux LVM

現在我的問題是:這對伺服器來說是否正常且健康,如果不是,我該如何解決?

resize2fs和 e2fsprogs 套件中的其他工具假定read係統呼叫要麼返回整個請求的大小,要麼遇到錯誤。這通常不是真的:read允許返回更少,你應該在循環中呼叫它。我認為 Linux 核心保證read在某些情況下從塊設備返回所有數據,但我過去一直被這個問題困擾,因為 e2fsprogs 對核心做出了錯誤的假設。

e2fsprogs 不循環的事實read確實是一個錯誤。充其量只是一個限制:在訪問塊設備時,對於某些版本的 Linux 核心,程式碼的編寫方式**可能是正確的。但這種限制沒有記錄在任何地方。訪問圖像文件時,程式碼肯定有問題。

檢查核心日誌是否有錯誤。如果核心報告錯誤,那麼問題不是 resize2fs 中的錯誤(或者至少,只不過是糟糕的錯誤報告)。

如果核心不報告磁碟錯誤,執行

strace -o resize2fs.strace sudo resize2fs /dev/sda2 115G

並檢查read系統呼叫。

閱讀(3,“...”,*請求*)=*閱讀*

如果REQUESTEDREAD ,則有一個簡短的閱讀。如果您觀察到這一點,並且可以重現它,那麼值得進行錯誤報告。準確解釋你是如何觸發的:確切的核心版本、核心是如何編譯的、resize2fs 的確切版本、管理的硬體驅動程序/dev/sda、執行它的虛擬機軟體。我建議將錯誤報告給 Ubuntu 而不是上游,因為上游通常不擅長與非專家交談。

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