如何防止核心訪問 ext4 分區上的日誌?
我希望這不是一個重複的問題。我見過幾個類似的問題,答案是將相應的設備或分區列入黑名單。但就我而言,我不能這樣做(見下文)。說了這麼多:
在 debian buster x64 主機上,我創建了一個 VM(基於 QEMU)。VM 在塊設備分區上執行,比如說
/dev/sdc1
. 我已經在那個分區上安裝了 debian 系統,基本上是這樣的(省略了一些步驟):#> mkfs.ext4 -j /dev/sdc1 #> mount /dev/sdc1 /mnt/target #> debootstrap ... bullseye /mnt/target
然後我綁定掛載了必要的目錄(
/dev
等/sys
),chroot 到/mnt/target
,完成了客戶作業系統的安裝並啟動了虛擬機。VM 首次啟動時沒有問題。但是隨著每次 VM 重新啟動,VM 都會出現更多問題,我在
GRUB
和initramfs
提示下進行修復,直到無法再修復,因為顯然ext4
文件系統已損壞。因為我最初認為我做錯了什麼,例如
ext4
在啟動 VM 之前忘記解除安裝分區,所以我多次從頭開始重複整個安裝。結果在每種情況下都是一樣的:幾次重新啟動後,ext4
文件系統被嚴重損壞,我無法修復它。偶然發現了這個問題的原因,但不知道如何解決這個問題。我注意到
e2fsck
拒絕在該分區上操作,聲稱它正在使用中,儘管它沒有安裝並且 VM 沒有執行。進一步調查表明存在核心執行緒jbd2/sdc
。這意味著主機核心訪問該分區/文件系統上的日誌。當我啟動 VM 時,來賓核心當然也會這樣做。我幾乎可以肯定文件系統的損壞是由於兩個核心同時訪問文件系統,特別是日誌。
我該如何解決這個問題?
我無法將主機上的相應磁碟或相應分區列入黑名單,因為我需要將它們掛載到那里以準備或完成在 chroot 中安裝來賓作業系統。另一方面,似乎不可能在 VM 啟動時告訴主機核心釋放日誌。
ext4
在過去的幾年裡,我安裝了很多虛擬機,完全相同的方式,但是在創建他們的文件系統時沒有打開日誌。因此,我對這些虛擬機沒有這個問題。編輯 1
如果相關,在掛載分區並 chroot 到其中以完成來賓作業系統安裝時,我使用以下命令:
cd /mnt mkdir target mount /dev/sdc1 target mount --rbind /dev target/dev mount --make-rslave target/dev mount --rbind /proc target/proc mount --make-rslave target/proc mount --rbind /sys target/sys mount --make-rslave target/sys LANG=C.UTF-8 chroot target /bin/bash --login
解除安裝時,我只是這樣做
umount -R target
該
umount
命令不報告任何錯誤。
通過傳遞
-o norecovery
到mount
,您可以在完全不使用日誌的情況下掛載文件系統。mount的手冊頁,ext3 部分:
norecovery/空載
不要在安裝時載入日誌。請注意,如果文件系統沒有完全解除安裝,跳過日誌重播將導致文件系統包含可能導致任何數量問題的不一致。