我想/home
每周用 Linux (Lubuntu 20.04) 备份我的计算机分区。问题是我拥有的唯一额外硬盘驱动器连接到 Windows 计算机。看来Windows如果没有一些第三方工具就无法管理ext3
或分区(我不知道这些工具有多可靠)。ext4
看起来我别无选择,只能在 NTFS 卷上进行备份。
那么,问题来了。怎样做才正确呢?
我发现了类似的问题这个线程,但十年前就有人提出并回答了(我说的是第二个答案,它比公认的答案更具体)。为了方便起见,我把相关部分复制在这里。
备份:
ionice -c2 -n5 nice -n9 tar czvf - /media/somelinuxdrivepath | split -b 16m - /media/usb/ntfsmounted/back.tar.gz.
要从备份副本恢复:
ionice -c2 -n5 nice -n9 cat /media/usb/ntfsmounted/back.tar.gz.* | tar xzvf - /media/somenewlinuxpath
但我对这个答案有三个疑问,如下:
- 十年已经很长了,那么从那以后是否有可能出现比(专门为此目的而设计的特殊工具)更可靠和/或更方便的东西?
- 我真的不明白命令之前的部分
tar
,我已经尝试过,但这超出了我的范围。 - 就我而言,/home 分区大小超过 200 GB。如果我在一周内只更改了少数文件,那么每个周末备份所有内容是否合理?类似的东西
Rsync
听起来像是一个合乎逻辑的选择,但它会是可用于完全恢复分区的完整副本吗?
答案1
在 Linux 上的 ntfs 和其他文件系统之间复制时,您可以使用getfacl
和setfacl
来备份/恢复文件的权限/所有权:
备份:
cp -rv /home /mnt/ntfs_vol
getfacl -R /home | xz -9 > /mnt/ntfs_vol/home_permissions.txt.xz
恢复:
cp -rv /mnt/ntfs_vol/home /
setfacl --restore <(xzcat /mnt/ntfs_vol/home_permissions.txt.xz)
编辑:
有人在前面的评论中提到了正式和非正式备份/验证之间的区别,您可以替换rsync
为cp
:
TS=$(date '+%Y%m%d%H%M%s') ; rsync -avv /home \
/mnt/ntfs_vol \
--log-file="/mnt/ntfs_vol/rsync.${TS}.log" && \
getfacl -R /home \
| xz -9 > "/mnt/ntfs_vol/home_permissions.${TS}.txt.xz"
参考:
https://superuser.com/questions/1002074/linux-command-line-to-create-a-log-file-for-rsync
如果您需要比这更正式的验证,那么您还可以生成加密哈希的清单:
apt install parallel
TZ=$(date '+%Y%m%d%H%M%s') ; find /home \
-type f | parallel sha256sum {} \
> "/mnt/ntfs_vol/backup.${TZ}.manifest"
并验证:
sha256sum --quiet -c /mnt/ntfs_vol/backup.2023122707571703692656.manifest
如果您因为名称或任何原因不喜欢 tar,但可以欣赏归档格式,那么还有另一种相当常见的替代方案:
find /home | cpio -vo > /mnt/ntfs_vol/archive.cpio
如果您检查此格式的内容:
find /usr/include/ | cpio -o | hexdump -C | head -n 20
00000000 c7 71 1d 00 9c 09 ed 41 00 00 00 00 01 00 00 00 |.q.....A........|
00000010 83 65 9c 05 0e 00 00 00 00 00 2f 75 73 72 2f 69 |.e......../usr/i|
00000020 6e 63 6c 75 64 65 2f 00 c7 71 1d 00 f9 47 ed 41 |nclude/..q...G.A|
00000030 00 00 00 00 01 00 00 00 92 64 2a 63 16 00 00 00 |.........d*c....|
00000040 00 00 2f 75 73 72 2f 69 6e 63 6c 75 64 65 2f 69 |../usr/include/i|
00000050 70 72 6f 75 74 65 32 00 c7 71 1d 00 f2 d6 a4 81 |proute2..q......|
00000060 00 00 00 00 01 00 00 00 6b 64 f8 6b 20 00 00 00 |........kd.k ...|
00000070 f7 04 2f 75 73 72 2f 69 6e 63 6c 75 64 65 2f 69 |../usr/include/i|
00000080 70 72 6f 75 74 65 32 2f 62 70 66 5f 65 6c 66 2e |proute2/bpf_elf.|
00000090 68 00 2f 2a 20 53 50 44 58 2d 4c 69 63 65 6e 73 |h./* SPDX-Licens|
000000a0 65 2d 49 64 65 6e 74 69 66 69 65 72 3a 20 47 50 |e-Identifier: GP|
000000b0 4c 2d 32 2e 30 20 2a 2f 0a 23 69 66 6e 64 65 66 |L-2.0 */.#ifndef|
000000c0 20 5f 5f 42 50 46 5f 45 4c 46 5f 5f 0a 23 64 65 | __BPF_ELF__.#de|
000000d0 66 69 6e 65 20 5f 5f 42 50 46 5f 45 4c 46 5f 5f |fine __BPF_ELF__|
000000e0 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 6d 2f |..#include <asm/|
000000f0 74 79 70 65 73 2e 68 3e 0a 0a 2f 2a 20 4e 6f 74 |types.h>../* Not|
00000100 65 3a 0a 20 2a 0a 20 2a 20 42 65 6c 6f 77 20 45 |e:. *. * Below E|
00000110 4c 46 20 73 65 63 74 69 6f 6e 20 6e 61 6d 65 73 |LF section names|
00000120 20 61 6e 64 20 62 70 66 5f 65 6c 66 5f 6d 61 70 | and bpf_elf_map|
00000130 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e | structure defin|
非常简单;没有任何编程经验,您不可避免地可以自己弄清楚如何解压这种格式,而且更好的是,它已经 46 年(截至 2023 年)没有真正改变。
答案2
最好的方法是什么...
鉴于/home
其中操作系统,不要备份到NTFS分区。添加第二个磁盘,现在这样做并不昂贵,将该磁盘格式化为 EXT4 或 XFS(Linux 支持的东西)。
但是,考虑到各种限制,如果您只想使用一些现有的存储空间,但它是 NTFS,那么/home
使用柏油。 tar 文件将保留所有权限,然后只需解压即可恢复您的主文件夹。当我需要使用 NTFS 分区进行备份时,它的效果足够好,并且是解决 linux 和 ntfs 权限问题的简单方法:
/etc/crontab
->0 1 * * * root /usr/local/backuphome.sh
这将在每天凌晨 1 点运行。/usr/local/backuphome.sh
创建包含如下内容的脚本chown root.root backuphome.sh; chmod 700 /backuphome.sh
#!/bin/bash
today="$(date '+%Y-%m-%d')"
tar -cf /ntfsdisk/backup/home_$today.tar /home