2009-08-07 28 views
2

我在一所大学工作,我部门的大部分备份需求都由中央网络服务提供。但是,许多用户都收集了大量文件,例如医学影像扫描,这些文件超出了他们可用的中央存储空间。用于用户文件的Linux数据仓库系统?

我在寻求为部门资源提供改进的备份解决方案,并建立了一个Linux服务器,员工可以在这里存放这些集合。不过,我可以预见服务器中的存储空间会被大量难以访问的文件所淹没。我有一个系统来解决这个问题,但是要确保我不会重新发明轮子。

我的理念:

  1. 用户的文件复制到服务器。
  2. 计划作业保存的所有文件上 单独的存储机制的完整 上最新副本(1TB的 外部驱动器是目前 专为此)
  3. 文件没有了一段访问 被从 服务器清除,但仍保留在存储 驱动器,保持在 现场环境大量的空间。
  4. 一个简单的接口(可能 基于Web)使用户可以访问其所有文件从 他们可以要求他们所需要的, 其从存储 驱动器复制到直播服务器的 列表。电子邮件 通知将在 文件被复制完成后发送。

这个概念是基于PACS(图片存档与通讯系统),我听说在以前的工作,但并没有直接使用。这使用了类似的“近线”备份过程,以允许访问大量数据,同时允许传输到本地机器的时间不会阻塞网络的其他部分。这与许多博物馆和学术图书馆所使用的原则相似,他们的“数据库”总量远远高于直接访问数据库所提供的数据量。

是否有一个简单的开源系统可用,符合我的要求?是否有其他系统使用不同的范例,但仍可能符合我的需求?

回答

1

S3在这里是一个有趣的想法。使用cron将未超过1个月的文件同步到Amazon S3,然后创建一个Web界面,供用户将sync'd文件恢复到服务器。在将文件移至S3并恢复之前发送电子邮件。

无限的存储,只需支付您所使用的。不是现有的开源项目,但组装起来不太困难。

如果您需要良好的安全性,请在将文件推送到Amazon之前将文件包装在GPG加密中。 GPG非常非常安全。

另一种更有效的替代方法是在本地存储所有数据。如果你不想买一个大的磁盘集群或大NAS,你可以使用HDFS:

,并同步到该行为类似于S3集群。您可以用商品硬件来扩展HDFS。特别是如果你有几台旧机器和一个快速网络已经铺设,这可能比严重的NAS便宜很多,而且尺寸更大。

祝你好运!我期待着看到更多的答案。

+0

我对此感到满意的是,其中一些文件包含患者可识别的信息。这就是为什么我希望在本地子网上设置某些东西,而不是将任何数据推送到云端(事实上,长期存储的加密是我应该考虑的另一件事情,尤其是在可移动驱动器上)。 谢谢。 – basswulf 2009-08-07 11:45:32

+0

啊,我以前在med工作过,你没有提到病人的资料。我会像上面那样做,但是在推送之前将所有文件包装在GPG中。有了足够强大的钥匙,他们应该保持安全。或者HDFS。我正在更新答案。 – mixonic 2009-08-07 12:20:27

0

- 请勿将患者数据上传到S3(至少不是我的)。

0

谷歌'开源'文件生命周期管理“'。我很抱歉,我只知道商业SAN应用程序,而不是如果有F/OSS替代品。

商业应用程序工作的方式是文件系统显示正常 - 所有文件都存在。但是,如果文件在某个时间段内没有被访问(对我们来说,这是90天),文件将被移动到辅助存储器。也就是说,除了第一个4094字节之外的所有内容都被移动。文件归档后,如果您寻找(读取)过去的字节4094,则会在文件从辅助存储中拉回时出现轻微延迟。我猜想小于4094字节的文件永远不会发送到辅助存储,但我从来没有想过。

这个方案的唯一问题是,如果你碰巧有东西试图扫描你的所有文件(例如网络搜索索引)。这往往会将所有东西都从二级存储中抽回来,填补了初级的空白,IT人员开始为您提供毛茸茸的眼球。 (我是,ahem,从一些轻微的经验谈起)。

您可以尝试在ServerFault.com上询问此问题。

如果你很方便,你可能会想出一个类似的方法使用cron和shell脚本。你必须用符号链接来替换4094字节的东西(注意,下面没有经过测试)。

# This is the server's local storage, available via network 
SOURCE_STORAGE_PATH=/opt/network/mounted/path 

# This is the remote big backup mount 
TARGET_STORAGE_PATH=/mnt/remote/drive 

# This is the number of days to start archiving files 
DAYS_TO_ARCHIVE=90 

# Find old files that are not already symlinks, using temp files 
# NOTE: You might have to account for spaces in file names 
TEMP_FILE=$(mktemp) 
find ${SOURCE_STORAGE_PATH} -atime +${DAYS_TO_ARCHIVE} -a -not -type l > ${TEMP_FILE} 

# This probably needs to change, if too many files in TEMP_FILE... 
# this would be a good point to drop into something like Perl 
for FILE in $(cat ${TEMP_FILE}); do 
    # split source into path and file name 
    BASE_PATH=$(dirname ${FILE}); 
    FILE_NAME=$(basename ${FILE}) 

    # path to target 
    TARGET_PATH=${TARGET_STORAGE_PATH}/${BASE_PATH} 
    # make sure target exists (note -p option to mkdir) 
    [ -d "${TARGET_PATH}" ] || mkdir -p ${TARGET_PATH} 
    # move source to target 
    mv ${FILE} ${TARGET_PATH} 
    # replace source with symlink to target 
    ln -s ${TARGET_PATH}/${FILE_NAME} ${FILE} 
done 
+0

谢谢你 - 一些有趣的想法。我打算让这个问题在周末坐下来,并在周一回来。 – basswulf 2009-08-07 13:34:47