在 Linux 中一切皆文件

在 Linux 中一切皆文件

我有一个小 Bash 脚本来检查系统今天是否已备份,如果尚未备份,则它将整个文件系统复制到备份文件夹中:

date=$(date +"%m%d%y")
sudo mkdir -p "/backups/system/$date"
sudo cp -r "/" "/backups/system/$date"

我的问题是,当我输入此内容时,它出现以下错误:

cp: error reading ‘/proc/1/task/1/mem’: Input/output error
cp: failed to extend ‘/backups/system/040315/proc/1/task/1/mem’: Input/output error
cp: error reading ‘/proc/1/task/1/clear_refs’: Invalid argument
cp: failed to extend ‘/backups/system/040315/proc/1/task/1/clear_refs’: Invalid argument

答案1

在 Linux 中一切皆文件

(这并不意味着你可以备份它们)

从技术上讲,并非所有东西都是文件(我不是专家)。但是,有些文件夹很特殊,因为它们不是真正的文件夹。/proc只是其中之一。它是一个包含运行时文件信息的虚拟文件系统换句话说,其内容会随着系统运行而不断变化。您不应尝试备份它。

其他此类文件夹包括/sys、、和。类似是另一个虚拟文件系统,它提供运行内核变量的窗口,因此您不想尝试备份或恢复它们。/mnt是一个 tmpfs,其内容由 动态创建和删除,因此您也不想备份或恢复它。同样,是一个 tmpfs,它保存不需要备份的运行系统变量。本段改编自/media/run/dev/sys/proc/devudev/run备份您的系统/TAR

一般来说,复制/不是一个好主意。注意,/backups/system/$date也是 的一部分/。因此,您可能最终会一直备份,或者磁盘空间不足。

希望这可以帮助

答案2

忽略它们。正如您所见,您尝试复制的文件既/proc毫无意义又不起作用。这些基本上是由操作系统创建的运行时文件。没有必要或理由备份此类文件。

因此,简单的方法就是忽略错误。您也可以通过将错误输出重定向到以下位置来阻止它们出现/dev/null

sudo cp -r / "/backups/system/$date" 2>/dev/null

更复杂的方法是指定要复制的目录。例如:

sudo cp -r /lib /usr /mnt /bin /opt /lib64 /tmp /home /sbin /media /etc /root  /boot /var "/backups/system/$date"

这些是你关心的。你可能不需要,/mnt或者/media两者都不需要。

相关内容