无法为 LXD 容器中挂载的主机文件设置 link

Can't make hard link for mounted host file in LXD container

我在非特权 LXD 容器中将主机目录配置为 disk 设备,例如 /opt/app/var,并且我在容器自身文件系统上创建了一个备份目录,例如 /backup

我使用 rsync/opt/app/var 文件备份到 /backup 硬盘 link,但我得到了 Invalid cross-device link

lxd 容器设备配置:

devices:
  var:
    path: /opt/app/var
    source: /opt/app/var
    type: disk

在容器中:

$ cat /proc/mounts | grep opt
/dev/sda2 /opt/app/var ext4 rw,relatime,stripe=64,data=ordered 0 0

$ cat /proc/mounts | grep "/ "
/dev/sda2 / ext4 rw,relatime,stripe=64,data=ordered 0 0

$ cat /etc/fstab
LABEL=cloudimg-rootfs   /    ext4   defaults    0 0

我发现lxd的挂载点来自/dev/sda2,根分区的挂载点也是来自/dev/sda2,所以应该在同一台设备上。

这不是容器问题。 您不能跨挂载点创建硬链接,即使它是您(绑定)挂载到 FS 层次结构中不同位置的同一设备。

在您的系统上试试这个:

> cd /tmp/
> mkdir bar
> mkdir barm1
> mkdir barm2
> sudo mount --bind bar barm1 
> sudo mount --bind bar barm2
> cd barm1
> echo foo > foo
> ll ../barm2/ 

drwxr-xr-x   2 user users   4096 Jul 13 15:56 ./
drwxrwxrwt. 19 root root  147456 Jul 13 15:57 ../
-rw-r--r--   1 user users      4 Jul 13 15:56 foo

> cp --link foo ../barm2/foo2

cp: cannot create hard link '../barm2/foo2' to 'foo': Invalid cross-device link