我在使用 btrfs (4.4) 机器(服务器 16.04)时遇到了这个问题
设想
/
ubuntu server 16.04 安装在 btrfs 上,带有标准子卷home
我想要实现的目标
放入/var
它自己的子卷(目前在同一个硬盘上)
我做了什么
sudo mkdir /subvol
sudo btrfs subvolume create /subvol/var
sudo rsync -azv /var/* /subvol/var/
在 /etc/fstab 中为子卷创建一行(我从 @home 子卷的现有行中复制了该行。它看起来像这样
UUID=79a74d84-2f0e-4098-9c58-f721eab913ee /mnt/var btrfs \ defaults,compress=lzo,subvol=@var 0 2
sudo mount -a
预期行为
新的子卷var
(位于 /subvol/var)被挂载到/var
实际行为
:~$ sudo mount -a mount: mount(2) failed: No such file or directory
不确定这种方法总体上是否好。这是我能想到的办法。有什么提示可以告诉我我的问题是什么吗?
答案1
根据ubuntu wiki 上的 btrfs 部分(假设该布局仍然适用),默认设置是包含@
和@home
子卷的 btrfs 根。
/subvol/var
这里大概是在挂载内部创建的@
,因此它相对于 btrfs 根目录(subvolid=5)的路径将是<FS_TREE>@/subvol/var
,下面的说明都是基于这个假设。
因此,您可能希望将子卷移动到<FS_TREE>/@var
,例如
mnt -o subvolid=5 /mnt
mv /mnt/@/subvol/var /mnt/@var
umount /mnt
并保持 fstab 条目原样。
或者,编辑 fstab 条目以匹配当前位置
UUID=79a74d84-2f0e-4098-9c58-f721eab913ee /mnt/var btrfs \
defaults,compress=lzo,subvol=@/subvol/var 0 2