Ubuntu 软连接的备份与恢复
一 核心原则与选择
二 备份方法
仅备份软链接本身(保留链接)
cp -P /path/to/link /backup/links/
find /path/to/search -type l -exec cp -P {} /backup/links/ \;
备份软链接指向的实际数据(解引用)
cp -L /path/to/link /backup/data/
rsync -a --copy-links /path/to/source/ /backup/data/
tar -czvf backup.tar.gz -L /path/to/source/
备份目录树并保留链接关系(不跟随目标)
rsync -a -l /path/to/source/ /backup/tree/
tar -czvf backup.tar.gz /path/to/source/
三 恢复方法
从“仅链接”备份恢复(保留链接)
cp -P /backup/links/link_name /restore/path/
从“解引用内容”备份恢复(得到真实数据)
# 单文件/目录
cp -a /backup/data/file_or_dir /restore/path/
# 目录树
rsync -a /backup/data/ /restore/path/
# 从 tar 归档恢复
tar -xzvf backup.tar.gz -C /restore/path
从“保留链接的归档/同步”恢复(恢复链接关系)
# 从 rsync 保留链接的备份恢复
rsync -a /backup/tree/ /restore/path/
# 从 tar 归档恢复(默认保留链接)
tar -xzvf backup.tar.gz -C /restore/path
ls -l 检查链接是否指向预期目标。四 实战示例
# 1) 备份:仅保存链接本身
mkdir -p /backup/links
find /data -type l -exec cp -P {} /backup/links/ \;
# 2) 传输备份(示例用 rsync)
rsync -a /backup/links/ user@newhost:/backup/links/
# 3) 恢复:在新机器重建链接
ssh user@newhost "find /backup/links -type l -exec cp -P {} /data/ \;"
# 4) 校验
ssh user@newhost "ls -l /data | grep '^l'"
五 注意事项与排错
find /data -type l -exec sh -c 'readlink -f {} | grep -q "old-prefix" && echo {}' \; 找出受影响的链接并批量修正。ls -l 检查链接指向,必要时用 readlink -f 或 stat 校验;对关键数据可计算哈希值比对。