无法为 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
我在非特权 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