LXC 使用 rootfs 作为 ContainerName.img

LXC 使用 rootfs 作为 ContainerName.img

因此,我在我的 Ubuntu 16.04 机器上摆弄 LXC。

我想要/需要将我的容器设置rootfs为特定大小的图像。(不,zfs 在我的情况下不起作用)

因此,我已经通过 bash 脚本创建容器,一切设置完毕,并完美运行,现在我需要将挂载添加到我的主机,fstab以便在主机重启时持久保留挂载

所有这些都运行正常,容器/.img/mounts 全部创建并运行良好,并且在重启后仍然有效。

现在,在容器销毁时,我需要删除该行,fstab因为一旦容器被销毁,我就不需要安装它了……我知道我可能可以让它不受伤害,但为了保持清洁fstab,假设我需要来做到这一点。技巧是,我希望能够通过 shell 脚本来做到这一点,这样我就不必fstab每次认为有必要销毁容器时手动编辑我的文件。

我添加以下行

    T=$(grep -ir "/home/containers/$UsersName/rootfs" /etc/fstab);
    if [ ! -n $T ]; then
        echo "/home/$UsersName.img   /home/containers/$UsersName/rootfs    xfs   noatime    0       0" >> /etc/fstab;
        mount -a;
    fi;

其中$UserName= 预先指定的字符串。

我怎样才能通过我的 bash 脚本删除该行?

答案1

查看关于如何删除一行的答案。有几种方法可以实现这一点,但也有一些注意事项,例如转义字符串和匹配模式。这使得很难给出一个一劳永逸的答案。

sed既快又简单,但需要转义斜线。
反向 grep ( grep -v) 可能对你有用。只要确保没有匹配任何不需要的内容即可。

在您的示例中:grep -v "$UsersName.img" /etc/fstab > /etc/fstab.bak; mv /etc/fstab.bak /etc/fstab
除包含的行之外的每一行都会匹配并重定向到 fstab.bak,最后重命名为 fstab。

相关内容