2009-08-07 32 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