尽管我的总体目标是在 Amazon Web Services (AWS) 上做一些事情,但我的具体问题与 AWS 无关。
背景
我的目标是使用包装机创建一个 Amazon 系统映像 (AMI),其中多个不同路径安装到不同的文件系统以提高安全性。例如,/tmp
应该使用该选项安装到文件系统noexec
。
事实上,我想要创建一个自动化流程来制作 AMI,这意味着我无法在实例本身中执行重新安装命令,因此我改为使用 Packer亚马逊 chroot 构建器。这意味着我运行一个 EC2 实例,并从该 EC2 实例运行 Packer。然后,Packer 将安装从与“源 AMI”一起使用的 EBS 快照中获取的 EBS 卷。我现在需要对已安装的 EBS 卷执行一些操作。
我的问题
我的第一步是对安装到的块设备进行完整备份/mnt/ebs
。
根据这部分的精彩演示https://youtu.be/8h_Y-L1Q8xI?t=13m47s,演讲者建议首先卸载设备然后使用tar
。
他重复这个操作顺序稍后在演示中。我的具体问题是:如果设备一开始就没有安装,如何创建设备内容的 tar 备份?另外,首先卸载它的目的是为了保证它处于一致的状态,在备份期间不会发生进一步的写入,还是其他什么?
umount -l
顺便说一句,尽管使用 或 检查繁忙的进程fuser
,但我似乎无法在没有该选项的情况下卸载设备,lsof
但我将把这些详细信息留给另一个问题。
请注意,我使用的是 Amazon Linux,它与 CentOS 类似,但不使用 systemd。
答案1
不,无法使用 tar 备份未挂载的文件系统。
Tar 正在等待备份文件,但正如您所怀疑的那样,在卸载文件系统后,这些文件将无法 tar 。
请注意,演示者声明:
...首先我们卸载所有东西Packer 刚刚为我们安装...
他没有说明 Packer 安装了什么,但仔细看看脚本的屏幕截图:它排除了各种安装点,例如 /proc 和 /dev。这意味着某物事实上已安装;我假设它是一个假根,带有绑定安装的伪文件系统。
创建基于 tar 的备份的理想方法是将文件系统挂载为只读。目的是在备份过程中保持文件系统的完整性;您不希望在备份过程中进行更改。
您似乎可以拍摄相关 EBS 卷的快照,将其以只读方式挂载到其他位置,然后从那里创建 tar 存档。