UNIX/Linux dump命令排除目录/文件
我使用dump命令将文件系统备份到磁带和远程服务器。
但是,我找不到任何允许我从备份中排除文件或目录的选项。
如何强制UNIX/Linux/FreeBSD dump命令排除我不想备份的选定文件(例如/var/cache或/usr/basejails)?
首先,转储是一种物理文件系统级备份程序,用于存档和还原整个转储的文件系统。
从备份中排除文件并不像您的tar或其他程序那样。
dump命令适用于索引节点号,不能从存档中排除特定文件。
但是,对于UNIX UFS和Linux ext3文件系统,有一个选项可以标记要从转储程序中排除的文件和目录。
这对于排除某些目录很有用,例如鱿鱼代理使用的缓存目录(/var/cache/squid)或监狱缓存模板目录等。
"警告!"请注意,默认情况下,级别0完全转储会忽略以下示例,并且仅在级别1和更高级别的增量备份上有效。
如果要在0级上使用它,则应在转储命令行上指定h选项(请参见下面的转储命令示例)
FreeBSD nodump和转储标志
chflags命令按照标志操作数指定的方式修改列出文件的文件标志:
nodump
:设置nodump标志dump
:清除nodump标志
请参见FreeBSD UFS文件系统上的转储标志
要查看名为/var/cache/squid的目录上的当前转储标志,请执行:
# ls -ldo /var/cache/squid/
输出示例
drwxr-xr-x 11 root wheel - 512 Jun 7 14:51 /var/cache/squid/
从转储中排除/var/cache/squid /目录
执行以下命令:
# chflags nodump /path/to/dir # chflags nodump /var/cache/squid # ls -ldo /var/cache/squid
输出示例:
drwxr-xr-x 2 root wheel nodump 512 Jun 7 14:51 /var/cache/squid/
要删除标志,请执行:
# chflags dump /var/cache/squid # ls -ldo /var/cache/squid
输出示例:
drwxr-xr-x 11 root wheel - 512 Jun 7 14:51 /var/cache/squid/
现在,要将完整的/var文件系统转储到/dev/sa0磁带,请执行:
# /sbin/dump -0uLf /dev/sa0 /var
要进行增量备份,请执行:
# /sbin/dump -1uLf /dev/sa0 /var
默认情况下,不能从dump命令中排除零级转储(完整文件系统)。
-h选项仅在达到或高于给定级别的转储时才兑现用户nodump标志。
默认荣誉级别为1,因此增量备份会忽略此类文件,但完整备份会保留它们。
换句话说,要从完全备份中排除目录,请执行:
# /sbin/dump -h0 -0ulf /dev/sa0 /var
Linux d转储程序的属性
首先,解决方法:您需要Linux内核2.5.19及更高版本才能使用d属性。
可以使用chattr命令设置此属性。
运行转储程序时,设置了d属性的文件或目录不适合备份。
查看d属性
要列出Linux第二个扩展文件系统上的文件属性,请使用lsattr命令:
# lsattr -d /path/to/file # lsattr -d /var/spool/squid
输出示例:
------------------- /var/spool/squid/
设置d属性
使用chattr命令,如下所示:
# chattr +d /var/spool/squid # lsattr -d /var/spool/squid/
输出示例:
------d------------ /var/spool/squid/
要清除d属性,请执行:
# chattr +d /var/spool/squid # lsattr -d /var/spool/squid/
输出示例:
------------------- /var/spool/squid/
要从0级备份开始,例如:
# /sbin/dump -0u -f /dev/st0 /var
要遵循级别0的用户nodump标志,请执行:
# /sbin/dump -h 0 -0u -f /dev/st0 /var