无法使用“ mkdir / mnt / vzsnap0”进行权限被拒绝的容器备份

时间:2019-08-13 01:04:52

标签: proxmox

所有操作均以root用户的身份完成。

/usr/share/perl5/PVE/VZDump/LXC.pm上的备份脚本设置了默认的挂载点

my $default_mount_point = "/mnt/vzsnap0";

但是无论我使用GUI还是命令行,都会出现以下错误:

ERROR: Backup of VM 103 failed - mkdir /mnt/vzsnap0: 
Permission denied at /usr/share/perl5/PVE/VZDump/LXC.pm line 161.

该脚本中的第160-161行是:

my $rootdir = $default_mount_point;
mkpath $rootdir;

安装后,在创建任何映像或进行任何备份之前,我设置了两件事。

  • (1)用于/mnt/backups的SSHFS挂载
  • (2)将所有其他驱动器添加为Linux LVM

添加驱动器的操作很简单:

pvcreate /dev/sdb1
pvcreate /dev/sdc1
pvcreate /dev/sdd1
pvcreate /dev/sde1
vgextend pve /dev/sdb1
vgextend pve /dev/sdc1
vgextend pve /dev/sdd1
vgextend pve /dev/sde1
lvextend pve/data /dev/sdb1
lvextend pve/data /dev/sdc1
lvextend pve/data /dev/sdd1
lvextend pve/data /dev/sde1

有关SSHFS的说明,请参见我的博客文章:https://6ftdan.com/allyourdev/2018/02/04/proxmox-a-vm-server-for-your-home/


以下是与文件系统目录权限相关的文件和详细信息。

cat /etc/fstab

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/pve/root / ext4 errors=remount-ro 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0

df -h

Filesystem                                Size  Used Avail Use% Mounted on
udev                                      7.8G     0  7.8G   0% /dev
tmpfs                                     1.6G  9.0M  1.6G   1% /run
/dev/mapper/pve-root                       37G  8.0G   27G  24% /
tmpfs                                     7.9G   43M  7.8G   1% /dev/shm
tmpfs                                     5.0M     0  5.0M   0% /run/lock
tmpfs                                     7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/fuse                                  30M   20K   30M   1% /etc/pve
sshfs@10.0.0.10:/mnt/raid/proxmox_backup  1.4T  725G  672G  52% /mnt/backups
tmpfs                                     1.6G     0  1.6G   0% /run/user/0

ls -dla /mnt

drwxr-xr-x 3 root root 0 Aug 12 20:10 /mnt

ls /mnt

backups

ls -dla /mnt/backups

drwxr-xr-x 1 1001 1002 80 Aug 12 20:40 /mnt/backups

我希望成功的命令是:

vzdump 103 --compress lzo --node ProxMox --storage backup --remove 0 --mode snapshot

为进行记录,容器映像的大小仅为8GB。

克隆容器起作用,快照起作用。


问与答


问):您如何运行perl脚本?

A),通过GUI单击立即备份,然后选择存储空间(我有backupslocal,两者都产生此错误),然后选择容器的状态({SnapshotSuspendStop每个都会产生相同的错误),然后选择压缩类型(none,{{1} }和LZO都产生相同的错误)。完成所有设置后,点击备份并获得以下输出。

gzip

由此您可以看到命令是INFO: starting new backup job: vzdump 103 --node ProxMox --mode snapshot --compress lzo --storage backups --remove 0 INFO: Starting Backup of VM 103 (lxc) INFO: Backup started at 2019-08-18 16:21:11 INFO: status = stopped INFO: backup mode: stop INFO: ionice priority: 7 INFO: CT Name: Passport ERROR: Backup of VM 103 failed - mkdir /mnt/vzsnap0: Permission denied at /usr/share/perl5/PVE/VZDump/LXC.pm line 161. INFO: Failed at 2019-08-18 16:21:11 INFO: Backup job finished with errors TASK ERROR: job errors 。我也尝试过使用SSH Shell登录并运行此命令,并得到相同的错误。


Q)可能是设置了目录的“不可变”属性。尝试vzdump 103 --node ProxMox --mode snapshot --compress lzo --storage backups --remove 0,看看lsattr /是否设置了小写的“ i”属性。

A) /mnt

root@ProxMox:~# lsattr /

问)?您可以手动创建--------------e---- /tmp --------------e---- /opt --------------e---- /boot lsattr: Inappropriate ioctl for device While reading flags on /sys --------------e---- /lost+found lsattr: Operation not supported While reading flags on /sbin --------------e---- /media --------------e---- /etc --------------e---- /srv --------------e---- /usr lsattr: Operation not supported While reading flags on /libx32 lsattr: Operation not supported While reading flags on /bin lsattr: Operation not supported While reading flags on /lib lsattr: Inappropriate ioctl for device While reading flags on /proc --------------e---- /root --------------e---- /var --------------e---- /home lsattr: Inappropriate ioctl for device While reading flags on /dev lsattr: Inappropriate ioctl for device While reading flags on /mnt lsattr: Operation not supported While reading flags on /lib32 lsattr: Operation not supported While reading flags on /lib64 lsattr: Inappropriate ioctl for device While reading flags on /run 且没有任何问题吗?

A) /mnt/vzsnap0

root@ProxMox:~# mkdir /mnt/vzsnap0

Q)您可以在干净的VM中复制它吗?

A)我不知道。我没有额外的系统可以尝试,需要包装上的容器。在ProxMox的VM内尝试...我不确定。我想我可以尝试,但我真的不想只是暂时。也许其他所有方法都失败了。


Q)如果您查看mkdir: cannot create directory ‘/mnt/vzsnap0’: Permission denied ,似乎有一个ID为drwxr-xr-x 1 1001 1002 80 Aug 12 20:40 /mnt/backups的用户可以访问备份,因此连root也不会能够写。您需要检查为什么它是1001,以及1001代表哪个组。然后,您可以将1002以及GUI运行所在的用户添加到ID为root的组中。

A)我写到1002目录没有问题。刚才做了/mnt/backups,就成功了。

6 个答案:

答案 0 :(得分:2)

根据消息

  

mkdir / mnt / vzsnap0:权限被拒绝

很明显,问题出在 / mnt 目录的权限。

可能是目录的“ 不可变”属性已设置。

尝试lsattr /,看看/mnt是否设置了小写的“ i ”属性。

作为reference

  

lsattr输出中的小写字母i表示文件或目录设置为不可变:即使root用户也必须先清除此属性,然后再对其进行任何更改。使用root用户访问权限,您应该可以使用chattr -i /mnt删除它,但是可能首先要这样做是有原因的;您应该先找出原因,然后再将其删除。可能存在安全隐患。

如果是这种情况,请尝试:

chattr -i /mnt

将其删除。

参考

lsattr output

根据inode flags—attributes manual page

  

FS_IMMUTABLE_FL'i':                 该文件是不可变的:不允许对该文件进行任何更改                 内容或元数据(权限,时间戳,所有权,链接                 计数等等)。 (此限制甚至适用于                 ruser。)只有特权进程(CAP_LINUX_IMMUTABLE)可以                 设置或清除此属性。

答案 1 :(得分:1)

只要赏金仍然有效,我都会将其提供给解决此处所述问题的合法答案。

我在这里为大家写的是解决方法,我已经想到了哪种方法可行。请注意,它非常慢

由于我能够写入网络上另一个系统上的import math def trackflow(f_in, f_out, r, H, h, t_max, t_open): t = 0.1 vi = 0 hi = 0 ti = 0 while ti < t_max and hi < H and hi >= 0: if ti == t_open: v_2 = vi + (f_in - f_out)*t h_2 = hi + ((f_in - f_out)*t)/(math.pi*r**2) t_2 = ti + 0.1 print(round(v_2,1)) print(round(h_2,2)) print(round(t_2,1)) continue else: f_out = 0 v_2 = vi + (f_in - f_out)*t h_2 = hi + ((f_in - f_out)*t)/(math.pi*r**2) t_2 = ti + 0.1 print(round(v_2,1)) print(round(h_2,2)) print(round(t_2,1)) vi = v_2 hi = h_2 ti = t_2 目录 ,因此我继续将Perl脚本更改为指向/mnt/backups而不是/mnt/backups/vzsnap0

对于任何能够获得/mnt/vzsnap0目录作为安装路径以成功为备份脚本安装/mnt的人来说,赏金仍然存在。

答案 2 :(得分:0)

1) 也许您的“ / mnt / vzsnap0”被挂载为只读?

它可能会告诉您:

/dev/pve/root / ext4 errors=remount-ro 0 1 'errors = remount-ro'表示在错误重新安装分区(如只读)的情况下。也许此设置也适用于您已挂载的文件系统。

您可以按照以下链接尝试重新安装驱动器吗? https://askubuntu.com/questions/175739/how-do-i-remount-a-filesystem-as-read-write

如果成功,然后手动创建目录吗?

2)如果没有帮助: https://www.linuxquestions.org/questions/linux-security-4/mkdir-throws-permission-denied-error-in-a-directoy-even-with-root-ownership-and-777-permission-4175424944/ 那里有人评论:

  

包含目录的分区的文件系统是什么。[?]   仔细检查目录的权限,或者它是否是   链接到另一个目录。如果目录是NFS挂载,   rootsquash可以防止root书写。

     

检查属性(lsattr)。检查ACL(getfacl)。检查   selinux的限制。 (ls -Z)

     

如果文件系统已损坏,则可能最初是通过RW挂载的,但是   当您尝试写入不良区域时,请更改为RO。

答案 3 :(得分:0)

太好了,事实证明,使用Ubuntu Make的issue已有很长的历史了,很多人都遇到过。

我在上面的链接中看到了Ubuntu开发人员提到的解决方法。

只需执行以下步骤:

sudo -s
unset SUDO_UID
unset SUDO_GID

然后运行umake 以正常安装应用程序。

您现在应该能够安装到所需的任何目录。完美地为我工作。

答案 4 :(得分:0)

如果启用了SE Linux,请尝试ls laZ /mnt查看安全性上下文。然后可能需要重新标记。 errors=remount-ro也应进行调查(但是,除非lsattr索引节点本身已损坏,否则/mnt不太可能失败)。为这些安装点创建一个新的目录索引节点可能值得一试;如果可行,可以交换它们。

答案 5 :(得分:0)

只需将 /mnt/backups 更改为 /mnt/sshfs/backups

vzdump 将起作用。