UNIX/Linux dump命令排除目录/文件

时间:2020-01-09 10:38:40  来源:igfitidea点击:

我使用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