Filesystems
如果沒有掛載,為什麼系統會使用分區?
在遇到虛擬機的性能問題後,我一直在將我的系統從 btrfs 遷移到 ext4。我的筆記型電腦中有兩個硬碟可以使用。我已經成功地移動了我的主分區,但是我使用的相同步驟不適用於 root。
目前進展:
我已經
dd
將我的根分區/dev/sda3
從/dev/sdb3
. 我修改/etc/fstab
為以下內容:$ cat /etc/fstab # # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> <pass> # UUID=95f13c34-96ca-49e3-bcb2-ff594df31506 /dev/sdb3 / btrfs rw,noatime,ssd,space_cache,discard 0 0 # UUID=0fe04f59-599f-41e2-ac30-2ad0f17a9727 /dev/sda2 /boot ext2 rw,relatime 0 2 # UUID=44741e0f-924a-4841-80ef-2132bef84182 /dev/sda4 /home ext4 rw,noatime,discard 0 0
並執行
sudo mkinitcpio -p linux
。它似乎工作。我可以通過在第二個磁碟上安裝分區來啟動。df
顯示:$ df Filesystem Size Used Avail Use% Mounted on /dev/sdb3 28G 18G 9.8G 65% /
因此,很明顯,
sdb3
是已安裝,而不是sda3
. 這是有問題的步驟:當我嘗試格式化sda3
據稱未使用的 format 時,我得到以下資訊:$ sudo mkfs.ext4 /dev/sda3 [sudo] password for stew: mke2fs 1.42.11 (09-Jul-2014) /dev/sda3 contains a btrfs file system Proceed anyway? (y,n) y /dev/sda3 is apparently in use by the system; will not make a filesystem here!
sda3
正在使用中。它如何以及為什麼可能會被使用?根據 casey 的評論,mount 的輸出:
mount | grep sd /dev/sdb3 on / type btrfs (rw,noatime,ssd,discard,space_cache) /dev/sda4 on /home type ext4 (rw,noatime,discard,data=ordered) /dev/sda2 on /boot type ext2 (rw,relatime)
根據 Warwick 的評論,解除安裝:
$ sudo umount /dev/sda3 umount: /dev/sda3: not mounted
在其他地方掛載和解除安裝 sda3 可以成功,但沒有任何改變。
更新:更多可疑行為:
$ mount | grep sd /dev/sdb3 on / type btrfs (rw,noatime,ssd,discard,space_cache) /dev/sda4 on /home type ext4 (rw,noatime,discard,data=ordered) /dev/sda2 on /boot type ext2 (rw,relatime) $ sudo mount /dev/sda3 mnt [sudo] password for stew: $ mount | grep sd /dev/sda3 on / type btrfs (rw,noatime,ssd,discard,space_cache) /dev/sda4 on /home type ext4 (rw,noatime,discard,data=ordered) /dev/sda2 on /boot type ext2 (rw,relatime) /dev/sda3 on /home/stew/mnt type btrfs (rw,relatime,ssd,discard,space_cache)
掛載 sda3 後,sdb3 不再是 mounter。很奇怪吧?
根據 mikeserv:
$ rmmod btrfs rmmod: ERROR: Module btrfs is in use
這是非常預期的,因為 sdb3 是 btrfs 並且應該安裝到 root。從我的 mkinitcpio.conf 文件中:
MODULES="" HOOKS="base udev autodetect modconf block filesystems keyboard fsck"
我想到了。我的引導載入程序配置不正確。聽起來很明顯,對吧?修改 fstab 並不完全符合配置引導載入程序的條件。我不得不更改一行
/boot/syslinux/syslinux.cgf
以引用正確的引導分區。也就是說,首先不需要從第二個磁碟啟動。我可以通過在實時環境中完成整個過程並 chroot 執行來避免這個問題
mkinitcpio
。