小编Kro*_*mey的帖子

在不更改权限的情况下将目录下的所有文件设为只读?

首先介绍一下背景:

  • /dev/md1 是用作主要文件存储的 RAID-0 阵列。它挂载到 /var/smb。
  • /dev/md2 是另一个 RAID-0 阵列,用于存储从 /dev/md1 获取的备份快照。它挂载到 /var/smb/snapshots。
  • 通过 Samba 提供三个目录:/var/smb/files(公共共享文件)、/var/smb/private(私有文件)和 /var/smb/snapshots(提供对备份快照的只读访问)。

仅允许 smbusers 组中的用户访问文件和快照共享;同样,只有 smbprivate 组中的用户才可以私下访问文件。此外,Linux 权限禁止不在相应组中的用户访问本地系统上和 Samba 共享的快照中的文件和私有目录。

这很棒,因为这意味着我们有一个功能齐全的文件服务器,带有自助“从备份恢复”选项(用户可以简单地访问快照共享并检索他们想要自己恢复的文件),但是到目前为止,我缺少一个关键因素:本地系统上对 /var/smb/snapshots 目录的非 root 访问。

快照必须对所有普通用户严格只读,当然文件系统必须以读写方式挂载以允许备份操作发生。这些目录的权限目前是:

root@odin:/var/smb# ll
total 40
drwxrwxr-x  7 root   root        4096 2011-04-11 15:18 ./
drwxr-xr-x 14 root   root        4096 2011-04-10 19:07 ../
drwxrwx--- 15 kromey smbusers    4096 2010-12-07 13:09 files/
drwxrwx---  7 kromey smbprivate  4096 2010-04-07 07:08 private/
drwxrwx---  3 root   root        4096 2011-04-11 15:16 snapshots/
Run Code Online (Sandbox Code Playgroud)

现在,我想要的是为非 root 用户提供对快照目录的访问,但以严格的只读方式。但是,我无法以只读方式挂载 …

linux permissions mount

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

支持压缩和维护硬链接的类似 rsync 的工具?

我使用rsync基于 的备份方案来维护我的文件服务器的每日(以及很快每周和每月)“快照”,使用rsync的 link-dest 功能在未更改的文件的快照之间存储硬链接。这非常有效:备份超过 330 GB 的数据,如果没有文件更改,整个快照仅占用 1.5 MB 磁盘空间。

最近,这台服务器的硬盘驱动器故障让我意识到我现在是多么脆弱——虽然由于这些备份快照,我没有丢失任何数据,但备份和它们备份的数据都位于同一个物理盒子中我公寓里的办公室;像我公寓楼里的一场小火灾这样简单的事情就可以完全抹去我数据的最后一点(双关语)!

我有一个异地位置,我可以将外部硬盘驱动器带到那里,所以我打算实施一个轮换异地备份,其中一个硬盘驱动器离线和异地,同时插入第二个并备份我的快照,我会定期(例如每周一次)交换它们,这样如果最坏的情况发生,我最多会丢失最后几周的数据。

现在问题来了:我想在外部硬盘驱动器上备份我的快照,而不是数据本身。(我有一天没有注意到硬盘故障,所以那天的每日快照几乎毫无价值;然而,拥有额外的快照是拯救我的培根的原因,我也希望在这里得到同样程度的保证。自我注意: 实际上监控那些方便的 SMART 数据...) 久经考验是cp行不通的,因为它会看到单个文件,而不是硬链接,将所需的存储空间增加 7 倍!rsync 会工作,但我希望这些外部驱动器上的数据被压缩,以便我可以使用更小的驱动器(我的目标是 1TB,对于当前 337 GB 的数据来说已经足够了,但明显小于几乎3TB 容量的文件服务器;我不希望能够将所有 3 TB 备份到仅 1 TB 驱动器,即使进行压缩,我只希望 1 TB 随着我的数据增长具有最长的使用寿命)。

那么,有没有人知道一种方法,我可以通过该方法维护快照之间的硬链接关联,同时压缩我正在备份的文件?理想的解决方案还支持排除列表,因此我可以简单地跳过压缩已经压缩的文件(.zip、.gz、.mp3、.jpg 等)。

只是为了绝对清楚,我正在寻找一种方案,其中 /backup/snapshots/daily.1/file1 中指向 /backup/snapshots/daily.0/file1 的硬链接将被复制到 /mnt/external_hdd /snapshots/daily.1/file1 作为指向 /mnt/external_hdd/snapshots/daily.0/file1 的硬链接,后者(实际文件本身)现在已被压缩(例如 gzip)。

backup compression rsync

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

检测到设备已安装到特定文件夹?

作为改进备份方案的一部分,我现在添加了旋转外部硬盘驱动器,使一个始终安全地离开现场,而另一个则在接收备份数据。自然地,为了确保我的备份真正完成,备份将被编写和 cron'd。

我的计划是手动插入并安装硬盘驱动器,然后将其留在那里,直到需要卸载它(再次手动),将其拿走,放入下一个,然后(手动)安装那个。两个驱动器都将挂载到例如 /mnt/backup。

现在,问题来了:如果我忘记插入或安装硬盘驱动器,我不希望备份脚本运行。所以我需要能够在允许脚本运行之前检测是否有设备安装到 /mnt/backup 。我的第一个想法是在(未挂载的)/mnt/backup 目录中放置一个名为例如“NO_DRIVE_MOUNTED”的文件,然后在运行备份例程之前确保它存在,但这只是感觉很hackish。(同样,将一个名为“BACKUP_DEVICE_READY”的文件放在每个外部硬盘驱动器中并检查该文件是否存在的反面感觉就像黑客一样。)

有没有更好的方法来检测设备是否安装到给定目录?我宁愿避免检查设备本身,因为我的经验是在 Linux 中插入一个驱动器只会将它分配给下一个可用的 /dev/sdX,所以虽然有一天备份驱动器可能是 /dev/sdf,如果我下次连接备份驱动器时插入不同的驱动器,它是 /dev/sdg,这意味着对 /dev/sdf 的测试将失败!我还希望避免特定于设备的标识(例如通过 UUID),以便我可以更轻松、更透明地更换/升级驱动器。

这将在 Ubuntu 10.10 上(如果我拖得够久,可能是 11.04,因为我正在重建整个服务器的过程中),理想情况下,我想要一个简单的单行测试,我可以添加前缀我的备份命令直接在我的 crontab 中(但如果有必要,我也不怕 Bash 脚本)。

linux backup mount block-device

5
推荐指数
1
解决办法
3801
查看次数

标签 统计

backup ×2

linux ×2

mount ×2

block-device ×1

compression ×1

permissions ×1

rsync ×1