将 /home 目录备份到 NTFS 分区的最佳方法是什么?

将 /home 目录备份到 NTFS 分区的最佳方法是什么?

我想/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

但我对这个答案有三个疑问,如下:

  1. 十年已经很长了,那么从那以后是否有可能出现比(专门为此目的而设计的特殊工具)更可靠和/或更方便的东西?
  2. 我真的不明白命令之前的部分tar,我已经尝试过,但这超出了我的范围。
  3. 就我而言,/home 分区大小超过 200 GB。如果我在一周内只更改了少数文件,那么每个周末备份所有内容是否合理?类似的东西Rsync听起来像是一个合乎逻辑的选择,但它会是可用于完全恢复分区的完整副本吗?

答案1

在 Linux 上的 ntfs 和其他文件系统之间复制时,您可以使用getfaclsetfacl来备份/恢复文件的权限/所有权:

备份:

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)

编辑:

有人在前面的评论中提到了正式和非正式备份/验证之间的区别,您可以替换rsynccp

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 年)没有真正改变。

更多信息: https://en.wikipedia.org/wiki/Cpio

答案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

相关内容