标签: backup

bash强制复制同一文件

我们的系统管理员创建了一个备份系统,可以创建硬盘驱动器的快照。

当我尝试从快照恢复旧版本时:

cp /path/to/snapshots/foo.bar /path/to/folder/foo.bar
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

cp: `/path/to/snapshots/foo.bar' and  `/path/to/folder/foo.bar' are the same file. 
Run Code Online (Sandbox Code Playgroud)

我可以删除文件并复制它,但我想知道是否有办法用 cp 来做到这一点。

我知道这些文件没有链接,因为:

  1. 我可以更改源的内容并且快照保持不变(已测试)
  2. 我可以删除源和快照在那里恢复(测试)
  3. 这些文件存储在大学计算集群上。如果这样的事情是真的,那么早就有人被解雇了(或者至少是大喊大叫)。

尽管如此,inode文件的数量是相同的

集群是在red hat linux上实现的,不知道是什么文件系统

df 结果:

Filesystem           1K-blocks      Used Available Use% Mounted on
<ipadress>:/vol/hpc/storage
                      67633152  67633152         0 100% /storage
<ipadress>:/vol/hpc/storage
                     2186805248 982498048 1204307200  45% /storage
Run Code Online (Sandbox Code Playgroud)

统计结果:

  File: `/path/to/snapshots/foo.bar'
  Size: 404         Blocks: 8          IO Block: 4096   regular file
Device: 17h/23d Inode: 19750461    Links: 1
Access: (0644/-rw-r--r--)  Uid: (<num1>/  yotama9)   Gid: ( <num2>/ <groupname>)
Access: 2012-01-22 00:03:27.246852000 +0200
Modify: …
Run Code Online (Sandbox Code Playgroud)

filesystems backup file-copy files

7
推荐指数
1
解决办法
9888
查看次数

如何创建物理磁盘的快照?

我的其中一张磁盘上安装了 Windows 7。我想在我的 Xen HVM 中启动这个 Windows 系统,但我不希望更改是永久性的。所以我想创建我的 Windows 7 分区的快照。我检查了 LVM,但似乎 LVM 只能为它创建的 LV 创建快照。我正在寻找更通用的快照方法。

linux backup cloning hard-disk

7
推荐指数
1
解决办法
2948
查看次数

对远程服务器执行准确的快照和增量备份

我有几个 Ubuntu(可能还有 RHEL)服务器,我想备份到中央备份服务器(通过 rsh/SSH)。我想做快照和增量备份。目标是,如果其中一台备份服务器突然死机,我可以安装引导程序映像,从备份中恢复,并且最好在此后立即启动并运行。

这些服务器具有唯一的用户和组,以及一些相同名称的不同 gid 和 uid。我正在考虑 rsync(本地备份工作正常,我有细粒度的控制,所以我也可以备份 xattrs 和 ACL),但后来我意识到到远程服务器的 rsync 可能不会像预期的那样保留这些细微差别。

那么,有什么更好的方法来实现这一目标呢?是否有一个包通常用于此目的?

ubuntu rhel backup rsync snapshot

7
推荐指数
1
解决办法
3102
查看次数

setfacl 错误地更改了组权限

为了备份服务器的“/home”目录树,我创建了一个“备份”帐户并使用 setfacl 使其可以读取整个目录。我的 cron 作业每晚都以 root 身份运行此命令:

setfacl -R -m u:backup:rx,d:u:backup:rx /home
Run Code Online (Sandbox Code Playgroud)

很好,除了一个问题:每当我运行此命令时,它都会更改我的 ssh 密钥的组权限。

me@myserver:~/.ssh$ ls /home/me/.ssh/id_rsa -l
-rw-r-x---+ 1 me me 1679 Jan  8 18:35 /home/me/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

好吧,这会导致我的 ssh 程序停止运行,因为它现在是组可读的。奇怪的是,getfacl 不同意这些权限。

me@myserver:~/.ssh$ getfacl /home/me/.ssh/id_rsa
getfacl: Removing leading '/' from absolute path names
# file: home/me/.ssh/id_rsa
# owner: me
# group: me
user::r--
user:backup:r-x
group::---
mask::r-x
other::---
Run Code Online (Sandbox Code Playgroud)

getfacl 认为该文件不是组可读的。如果我运行明显的命令

chmod 400 id_rsa
Run Code Online (Sandbox Code Playgroud)

权限是固定的,但每次我重新运行原始命令时都会恢复(setfacl -R -mu:backup:rx,d:u:backup:rx /home)。这是怎么回事?

注意:我确实希望我的 id_rsa 备份,所以我们不用担心这些安全隐患。

acl backup permissions

7
推荐指数
2
解决办法
3654
查看次数

Rsnapshot 目标已满 - 如何安全地重新运行?

我今天运行了我的 Rsnapshot 备份,但我的外部驱动器在增量备份中途变满(我现在有大约 20 个增量备份)。

rsync: write failed on "<path>": No space left on device (28)
Run Code Online (Sandbox Code Playgroud)

我现在有一个 hourly.0 目录,我认为它包含一个不完整的增量备份。如何在不丢失数据的情况下从这种情况中恢复并重做备份?

我最初的想法是:

  1. 删除hourly.0(因为它包含自hourly.1 以来不完整的数据增量备份?)
  2. 释放外部驱动器上的空间或将外部驱动器的全部内容移动到更大的驱动器
  3. 重新运行 Rsnapshot。

我最担心的是删除 hourly.0 会以某种方式混淆 Rsnapshot 并导致问题。但这是正确的方法吗?

backup rsnapshot

7
推荐指数
1
解决办法
2783
查看次数

使用 Clonezilla 将大分区还原为小分区

前段时间我用 Clonezilla 创建了一个 EXT4 分区的备份。现在硬盘坏了,我丢失了一些重要数据。

分区的镜像大小为 50GB。我试图将这个映像恢复到 200GB 的 HDD,但结果原始分区的大小为 500GB。由于我没有用于转储的 500GB 硬盘驱动器,我想出了如何通过传递-C给 partclone来强制 Clonezilla 忽略它。但是在恢复时它因错误而停止target seek ERROR:Invalid argument

我可以想象分区上的数据是碎片化的,因此实际位图不适合。有解决方法吗?我有一个大约 600GB 的可用硬盘,但我不喜欢触摸分区表之类的东西。理想情况下是一种将其恢复为可安装映像的方法。(ISO或类似)

partition backup data-recovery clonezilla

7
推荐指数
1
解决办法
2万
查看次数

比较关于文件名(以及大小和日期)的目录树

我想检查从备份还原的结果。这是因为 MacOS 上的 TimeMachine 给了我一些奇怪的错误和警告,我想确保在恢复后一切都恢复原状。虽然我不相信 TimeMachine 会放回每个文件,但我相信它会将它恢复的每个文件都放回正确的内容。

我想过 diff -r,但经历大约 300 GiB 可能需要永远。我可以至少比较文件的存在,但在同一次运行中比较大小和日期更好。

我知道像这样的解决方案

diff <(ls -R $PATH1) <(ls -R $PATH2)
Run Code Online (Sandbox Code Playgroud)

但输出难以阅读。我宁愿每个文件只在一侧找到一行。此外,我必须依靠 ls 以相同的顺序在双方的树中进行。这可能不同,因为文件系统可能不同。

我最想得到一个懒惰的工具,它采用两条路径,输出差异达到任何所需的检查水平,也许是 macports 之外的东西。但我不害怕大量的抨击。

osx bash backup diff

7
推荐指数
2
解决办法
2万
查看次数

tar 目录成不大于一定大小的独立归档文件

我有一个包含许多文件的目录。这些文件总共占用了几 GB 的空间。我想压缩这个目录。

但是将目录压缩为单个文件会使该文件难以移动,因此我想要多个文件。

我可以使用:

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.
Run Code Online (Sandbox Code Playgroud)

要做到这一点,但我担心我将需要所有备份文件才能恢复任何数据。我更希望每个文件都是自己的独立单元,包含源数据的一部分。

我能想到的一种方法是构建一个脚本,该脚本计算每个输入文件的大小并贪婪地将文件附加到列表中,直到达到最大大小。然后对文件列表进行 tar-ed 并开始一个新列表。重复此操作,直到所有文件都在 tars 中。然后可以独立提取焦油。

这不是其他问题的重复,因为我特别想知道如何以这样的方式执行此操作,即整个存档的每个部分本身都是一个有效的存档,并且每个文件都可以在不需要联合存档的情况下重建。

有没有做这种事情的实用程序?

tar backup archive split

6
推荐指数
1
解决办法
1625
查看次数

哪种 Linux Mint Timeshift 方法更节省空间

关于 Linux Mint 中 Timeshift 备份的一些问题:

  1. 我可以期待 btrfs 选项和 rsync 选项之间用于备份的驱动器空间的差异吗?据我了解,btrfs 使用基于差异的快照,因此应该有效利用空间。rsync 会做类似的事情吗?

  2. 在家庭系统中使用 btrfs 而不是 ext4 有什么缺点吗?

  3. 如果某些内核更新或其他任何阻止系统启动,Timeshift 会在启动期间弹出作为恢复选项吗?

backup rsync linux-mint btrfs

6
推荐指数
1
解决办法
1万
查看次数

为什么在使用 MTP 设备时 rsync 如此缓慢?

为了使用 定期备份我的手机(Samsung A5 2016 或SM-A510Frsync,我使用了以下命令:

rsync --verbose --progress --omit-dir-times --no-perms --recursive --inplace --progress /run/user/1000/gvfs/mtp\:host\=%5Busb%3A002%2C018%5D/Phone/ /data/phone_back_folder/
Run Code Online (Sandbox Code Playgroud)
  • 1000 显然,是我用户的 UID
  • mtp\:host\=%5Busb%3A002%2C018%5D 是安装时给我的手机的临时 MTP 主机名(每次安装设备时都会以某种方式改变)
  • --omit-dir-times并且--no-perms在这里是因为 MTP 显然不是他们

因为我使用了这个--progress标志,所以我可以看到每个文件的估计传输速度,例如:

Phone/DCIM/Camera/20180408_184356.jpg
      2,814,075 100%   16.58MB/s    0:00:00 (xfr#265, to-chk=821/1262)
Run Code Online (Sandbox Code Playgroud)

但这些数字令人难以置信,因为在大多数情况下,系统似乎处于空闲状态,等待下一个文件传输。

$ dstat -cd --disk-util --disk-tps
----total-cpu-usage---- -dsk/total- sda--sdb--sdc- -dsk/total-
usr sys idl wai hiq siq| read  writ|util:util:util|reads writs
  6   1  93   0   0   0| 344k  166k|0.03:0.37:1.43|   5     6 
  2   0  98   0   0   0|4096B    0 |   0: …
Run Code Online (Sandbox Code Playgroud)

linux backup debian rsync mtp

6
推荐指数
1
解决办法
1852
查看次数