Ext4
嘗試打開 /dev/sda2 時的短讀
我剛剛將主機上的 .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,“...”,*請求*)=*閱讀*
如果REQUESTED ≠ READ ,則有一個簡短的閱讀。如果您觀察到這一點,並且可以重現它,那麼值得進行錯誤報告。準確解釋你是如何觸發的:確切的核心版本、核心是如何編譯的、resize2fs 的確切版本、管理的硬體驅動程序
/dev/sda
、執行它的虛擬機軟體。我建議將錯誤報告給 Ubuntu 而不是上游,因為上游通常不擅長與非專家交談。