Filesystems

如果沒有掛載,為什麼系統會使用分區?

  • August 28, 2017

在遇到虛擬機的性能問題後,我一直在將我的系統從 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

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