我们有一个应用程序会定期将自身备份到本地文件系统上的目录。该目录中还有几个文件和目录。
我想生成所有这些文件的“快照”,可以将其复制到备份存储中。
最重要的是,我如何以原子方式生成这个“快照”?请记住,任何这些文件都可能被备份守护进程修改,从而导致我们的“快照”不一致。
编辑:
也许我应该提到系统有一个ext4文件系统。
我想从终端访问 iCloud 驱动器以创建紧急备份。不幸的是,我安装的 Mac OS Yosemite 无法运行,所以我使用恢复模式来创建我的备份。在此模式下,Finder 不可用且 iCloud Drive 未运行。
我知道通常情况下,iCloud 驱动器目录位于
~/Library/Mobile\ Documents/com~apple~CloudDocs. 不幸的是在恢复模式下使用终端时,该目录中没有出现(有似乎没有移动文件的库)。这是有道理的,因为我没有以任何用户身份登录(并且我相信恢复实用程序在其自己的分区上运行)。
我的问题是:
cmd + r如果无法使用终端登录 iCloud 驱动器,Dropbox 将是一个替代方案。但是,我不确定是否可以在恢复模式下安装 Dropbox 命令行工具。
有谁知道如何设置vim(文本编辑器),以便可以追溯一天内对文件所做的所有更改?当我不小心修改了一个子程序并希望将它返回到它的初始状态时,我需要它,就像在一天开始时一样。
我通常使用 svn 将最新版本的源代码保存在全局存储库中。但有时我需要返回代码在两次 svn 提交之间的状态。
更新:
要启用持久撤消,请创建撤消目录,例如~/.vim/undodir,并将以下设置放入.vimrc文件中:
set undodir=~/.vim/undodir
set undofile
set undolevels=1000
set undoreload=10000
Run Code Online (Sandbox Code Playgroud) 这可能被认为更像是一个学术问题,但在这里。几年后回到 Linux,我在一台小型 PC 上安装了 Ubuntu 15.04 Desktop。
环顾文件系统,我看到了“真实文件”,例如其中的程序/bin,/usr/bin但我还记得 Linux 通过文件系统处理设备 IO。所以有一个/dev目录,里面有明显的文件。我在/proc.
如果我想保留我的文件系统(例如在磁盘死机后 Linux 恢复的上下文中),我可以轻松地保存和目录tar的内容并恢复这些类型的文件。/bin/usr/bin
计算机启动时写入了哪些文件,这些文件是否可以作为备份的一部分安全地忽略?另外,特殊权限或硬链接等怎么样?
下面的示例被简化以显示问题的核心,而不是问题本身(我的文件树比这更复杂)。
假设我有两个文件要备份;一个在~/somedir/otherdir,另一个在~/otherdir/somedir/。我想从一个 git 存储库中的两个目录备份文件。我怎样才能做到这一点?软链接只携带有关文件存储位置的信息,而不是实际文件,而硬链接对我来说有点陌生。这是应该使用硬链接的情况吗?
说明:我想使用git有四个原因:我想存储文本文件的点文件/脚本/配置并跟踪随时间的变化,我知道 git,我有一个私有的 git 存储库可以用来存储它们,以及我希望能够在多台 PC 之间共享这些文件。
我想尝试 Btrfs。我已经发现您可以制作实时系统的快照,但有几件事我还没有找到答案。好吧,据我所知,快照基本上是某种存档形式的完整副本。那么我可以制作我的实时 btrfs 系统的快照并将该快照放在我的非 btrfs 硬盘驱动器(例如 ext4)上吗?
另外,我正在运行全盘加密(luks)。如果我将它们传输到某个地方,快照是否会被加密?快照是从分区本身复制实际数据(在这种情况下它显然会被加密)还是它的工作方式不同?
另外,如何保护 btrfs 快照免受读取访问?其他用户可以读取快照吗?还是只有root?是否可控?
我rsync用来备份远程机器上的大硬盘。默认情况下,rsync当远程机器上的文件不再存在于本地机器上时,不会删除它们。这很有用,因为它可以恢复,例如,如果我想恢复一个被错误删除的文件,这也意味着我不需要担心 rsync'ing 一个空目录(如果硬驱动器死亡或未安装)。问题是它在远程主机上占用了大量磁盘空间,而且如果我需要恢复备份,它将被这些已删除的文件污染。
替代方法是rsync --delete,但这意味着已删除的文件也将在我第一次运行备份时被删除,如果挂载点变为空,那么我也有删除备份的风险。
理想情况下,我希望有一种方法可以告诉rsync执行 like --delete,但不是删除文件,而是可以将它们移动到不同的备份层次结构。这样,如果我愿意,我仍然可以恢复这些文件,我可以清理第二个层次结构中的较大文件以节省空间,而主备份层次结构将是我驱动器的干净备份。
有没有办法模仿这种行为?(或一些类似的行为)
(我没有足够的磁盘空间来维护远程主机上的两个完整备份。另外,我知道增量备份工具的存在,例如Borg Backup,但我想要一个不依赖重型工具的解决方案自定义存储格式。我也有点担心使用硬链接的解决方案,但如果它是最好的选择,我可以接受。)
过去几个小时我一直试图保存我的“/”但没有成功:(
我在 Debian 的一个测试分支上,我想每次更新前都保存我的系统。备份将在第二个驱动器上进行,该驱动器是可启动的 Win7。
sudo rsync -aAXv --inplace --info=progress2 --no-whole-file --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*} / "/media/sessionR/Disque Dur 1/System_save_sauvegarde_25.03.2017/" > save.txt
Run Code Online (Sandbox Code Playgroud)
下面相同的命令(不确定最佳可读性)
sudo rsync -aAXv --inplace --info=progress2 --no-whole-file --exclude={"/dev/\*","/proc/\*","/sys/\*","/tmp/\*","/run/\*","/mnt/\*","/media/\*","/lost+found","/home/\*} / "/media/sessionR/Disque Dur 1/System_save_sauvegarde_25.03.2017/" > save.txt
Run Code Online (Sandbox Code Playgroud)
源“/”在我的内部笔记本电脑 sata 硬盘上。
目标“/media/sessionR/Disque Dur 1/System_save_sauvegarde_25.03.2017/”是“/dev/sdb2”的挂载点,它是替代 DVD 驱动器的第二个内部 sata 硬盘驱动器。
复制一些文件后,大量文件出现错误:设备上没有剩余空间(28):
rsync: recv_generator: mkdir "/media/sessionR/Disque Dur 1/System_save_sauvegarde_25.03.2017/var/tmp" failed: No space left on device (28)
*** Skipping any contents from this failed directory ***
Run Code Online (Sandbox Code Playgroud)
下面的最终结果就像 2Gb 而不是试运行宣布的 ±11Gb:
sent 2,554,663,982 bytes received 1,188,942 bytes 17,446,095.04 bytes/sec
total size is …Run Code Online (Sandbox Code Playgroud) 我有一些包含超过 100Gb 数据的目录。我正在尝试将它们归档到较小的卷中,即每个独立/独立的10Gb 。
问题是如果我使用tar+ split,它会导致多个不独立的 tar 部分。我不能只从其中一个部分提取文件,除非我先将所有文件合并/合并回一个大文件。
我也尝试使用tar -c -L1000M ...分割卷,但这也不起作用,并且长文件名被截断存在问题。
也尝试star过,但似乎它的拆分卷也不是独立的;而 7zip 不保留 unix 中的权限。
我希望拥有独立的拆分档案的原因是为了安全起见,如果其中一个拆分文件损坏,我仍然可以从其他档案中检索数据。如果我只想提取特定的文件/文件夹,而不需要将所有档案合并回一个大卷,它也会快得多。
我如何最好地实现这一目标?谢谢你。
找到解决方案
正如@Haxiel 的回答所建议的那样,我找到了一个使用 tar 的解决方案。答案已发布在下面。
请注意,如果它跨越卷的边界并且您没有可用的下一个卷,则可能仍有一两个文件丢失,但即使其他部分丢失,至少可以独立提取单独的卷。
我通过 ssh 使用 gzip 压缩从另一台 Linux 计算机上“实时”备份我的树莓派。我使用这个脚本:
#!/bin/bash
dt=`date +%y%m%d`
ssh pi@192.168.1.141 "sudo dd if=/dev/mmcblk0 bs=1M | gzip -" | dd of=./pibackup-$dt.gz
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但生成的文件是 26Gb,这太多了(我认为)。我只想备份系统的内容,而不备份空闲集群。我知道 dd 会进行整个备份,包括空闲集群,但我认为通过使用 gzip 我可以减小生成文件的大小。
因此,当我输入 df -h 时,请查看我的系统:
Filesystem Size Used Avail Use% Mounted on
/dev/root 29G 3.1G 24G 12% /
devtmpfs 459M 0 459M 0% /dev
tmpfs 464M 0 464M 0% /dev/shm
tmpfs 464M 49M 415M 11% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 464M 0 464M 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 52M 201M 21% …Run Code Online (Sandbox Code Playgroud)