有很多关于rsync的在线howto,但经过几天的挣扎,反复阅读手册页并在一个排除文件中进行攻击,我需要一只手.
我创建了一个自定义本地init脚本,它将根文件系统加载到ram中,为了支持这个环境,我构建了一个名为ramsync的实用程序,它在/(在ram中)和/在"后备"磁盘上执行rsync.当我只想排除许多路径及其内容时,这一切都在游动.我已经使用这个系统已经有一段时间了,但是在阅读了更多关于rsync之后,我想扩展该实用程序,以便轻松调整模式的文件模式,包含一些文件,即时.所以这是我遇到麻烦的例子.
在ram上运行时安装软件就像执行正常安装一样简单,然后调用ramsync来复制磁盘上的更改.这比安装在磁盘上的所有解包/整理都要快得多,因为你只需在所有文件io完成后写下最终状态.(执行openstack计算节点构建的差异超过一小时)
我的ramsync的默认排除类似于:
cat > /tmp/excludes << EOF
/boot/
/boot/*
/dev/*
/dev/pts
/dev/
/media/*
/mnt/
/mnt/*
/proc/*
/proc/
/sys/*
/sys/
/tmp/*
/tmp/
/run/*
/run/
/var/cache/
/var/cache/*
/var/log/
/var/log/*
/var/run/
/var/run/*
/var/lock/
/var/lock/*
/var/tmp/*
/lib/modules/*/volatile/.mounted
/etc/apparmor.d/cache/*
/ramsync/*
/etc/mtab
EOF
Run Code Online (Sandbox Code Playgroud)
(/ ramsync是ram中磁盘的挂载点)
我通过rsync的"--exclude-from'/ tmp/excludes'"使用了这个列表.进一步阅读rsync的手册页让我相信,排除/包含的概念有点误导,因为--exclude-from和--include-from两者都可以包括包含和排除使用 - 和+运算符,并包含/如果您不包含运算符,则排除仅隐含默认值.我的阅读以及我认为在理解rsync过滤器模式和解析方面取得的进展使我将此模式文件重新制作为:
cat > /tmp/excludes << EOF
- /lib/modules/*/volatile/.mounted
- /etc/apparmor.d/cache/***
- /etc/mtab
- /var/cache/***
- /var/lock/***
- /var/log/***
- /var/run/***
- /var/tmp/***
- /boot/***
- /dev/***
- /media/***
- /mnt/***
- /proc/***
- /sys/***
- /tmp/*** …Run Code Online (Sandbox Code Playgroud)