Linux

mount: /new_root: fs 類型錯誤,/dev/nvme0n1p4 上的超級塊損壞,缺少程式碼頁或幫助程序,或其他錯誤

  • March 8, 2021

總的來說,我對 Linux 還很陌生,但我可以使用命令行來做一些基本的事情。目前我正在使用 Manjaro KDE。昨天,我跟著 Book Linux from Scratch 學習了更多關於 Linux 的知識。我做的最後一件事是將我的主分區縮小了 25 GB 並創建了一個新分區(使用 cfdisk)。一切都很好,預計今天我登錄 Manjaro 時,我得到了錯誤:

mount: /new_root: wrong fs type, bad superblock on /dev/nvme0n1p4, missing codepage or helper program, or other error.

sh: can't access tty: job control turned off

並被扔進了應急彈殼。正如我所說,我可以使用命令行來創建、複製和編輯文件,但這對我來說看起來太高級了。

編輯

在一切崩潰之前我做的最後一件事是:

第一次我使用 cfdisk 將我的主分區縮小了 25.6 GB。

第二,我使用 cfdisk 創建了一個新分區(20 GB)。

第三,我安裝了新分區。

第四,我在新分區上創建了一個新的 ext4 文件系統。

然後我關閉了我的電腦,當我今天啟動它時,它直接把我帶到了一個緊急外殼

我已經嘗試過:

mount /dev/nvme0n1p4 / (in the recovery shell, same Error).
mount /dev/nvme0n1p4 /media/nvme (from a live usb stick, same Error).

有誰知道為什麼會發生此錯誤以及如何挽救我的數據?

如果您在使用收縮它所在的分區之前沒有使用resize2fs收縮文件系統cfdisk,那麼您已經導致文件系統的尾部被切斷。系統現在檢測到文件系統聲稱比它所在的分區大,這是一個錯誤。

雖然 ext2/3/4 文件系統可以在使用時擴大,但縮小仍然需要先解除安裝它。它看起來像是/dev/nvme0n1p4你的根文件系統,它不能輕易解除安裝/並且需要特殊的安裝步驟/(將它安裝到其他地方,最小化執行的程序數量,並用於pivot_root切換到新的根文件系統),所以機會很高,您沒有使用正確的程序來調整文件系統的大小。

調整根文件系統大小的最簡單方法是從外部實時媒體啟動,並在完全解除安裝時使用它來調整已安裝作業系統的根文件系統的大小。另一種選擇是確保文件系統大小調整工具存在於 中initramfs,然後使用引導選項在 initramfs 引導階段中斷引導,而根文件系統尚未安裝,並在生成的緊急外殼中縮小文件系統.

現在的問題是調整文件系統的大小首先要求它沒有錯誤。暴力切斷文件系統的一部分絕對是一個錯誤。

您需要從實時媒體啟動系統,然後使用它來掛載和備份您創建的新分區的內容(如果有的話),然後刪除該分區並將/dev/nvme0n1p4分區恢復到其原始大小。然後你應該能夠執行e2fsck -C0 /dev/nvme0n1p4它來檢查錯誤(並希望修復任何可能由文件系統尾部的部分覆蓋引起的問題)。

然後,仍然在實時媒體環境中,將根文件系統掛載到臨時位置

mkdir /media/nvme
mount /dev/nvme0n1p4 /media/nvme

並使用它來編輯/etc/fstab已安裝的作業系統(現在位於/media/nvme/etc/fstab),以臨時註釋掉對您創建的新分區的任何引用。

然後您可以退出實時媒體並驗證您安裝的作業系統再次正常啟動。

然後再次使用實時媒體啟動以正確調整根文件系統的大小:

1.) 首先用於resize2fs /dev/nvme0n1p4 <new-size>調整分區內文件系統的大小。如果您知道調整大小後分區將具有的確切扇區數,則可以將其用作<new-size>值。否則,您應該將文件系統縮小到比您打算將分區縮小到略小大小,以防止單位轉換中的捨入(以及 base-2 與 base-10)錯誤。

2.) 然後收縮包含文件系統的分區。作為此步驟的一部分,您還可以使用可用空間創建新分區。

3.) 退出直播媒體並啟動到已安裝的作業系統以確認它仍然正常工作。如果您將文件系統的大小調整為小於新分區大小,您現在可以使用它resize2fs /dev/nvme0n1p4來自動檢測目前分區大小並擴展文件系統以完全匹配它。(是的,您可以在掛載文件系統時執行此操作。)

4.) 現在您可以繼續在新分區上創建文件系統,取消註釋/添加/etc/fstab它的行,並安裝新文件系統。

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