谷歌“开源“文件生命周期管理”。对不起,我只知道商业 SAN 应用程序,而不知道是否有 F/OSS 替代品。
商业应用程序的工作方式是文件系统看起来很正常——所有文件都存在。但是,如果在某个时间段内(对我们来说,这是 90 天)没有访问该文件,则该文件将被移动到辅助存储。也就是说,除了前 4094 个字节之外的所有字节都被移动。归档文件后,如果您查找(读取)超过 4094 字节,则在从辅助存储中拉回文件时会稍有延迟。我猜小于 4094 字节的文件永远不会发送到辅助存储,但我从没想过。
此方案的唯一问题是,如果您碰巧有一些东西试图扫描您的所有文件(例如,网络搜索索引)。这往往会将所有内容从二级存储中拉回,填满主存储,IT 人员开始给你毛茸茸的眼球。(我是,嗯,从一些轻微的经验中说出来。)
您可以尝试在 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