Linux

在保留所有屬性的同時將文件移出卷然後重新打開?

  • May 7, 2012

我有一種情況,我正在測試一個有一些元數據問題的新文件系統。所有文件都完好無損,但是我最終必須有效地將每個文件移到另一個卷上,然後立即放回原處。

顯然mv不會成功,因為它無法保留所有屬性(尤其是所有時間戳)。cp -p /original/path/to/file /tmp/location/file在執行, , rm /original/path/to/file,時cp -p /tmp/location/file /original/path/to/file,我在考慮更多類似於 find 命令的內容rm /tmp/location/file。也許所有這些命令都在傳遞給 find exec 的腳本中?

我不確定這裡最有效的方法,但想要一些快速輸入,以確保我涵蓋所有基礎並有一個精確的命令,不會讓我為某種數據屬性失去感到悲痛。並做了。我有數百 GB 的數據要來回移動,所以我需要盡可能小心和高效。

這是我到目前為止提出的解決方案,希望能提供一些意見:

外殼腳本safe_move.sh

#!/usr/bin/env bash
SRC_FILE_AND_PATH="$1"
SRC_BASENAME=`basename "$1"`
DESTINATION_PATH="/mnt/tmp"

cp -a ${SRC_FILE_AND_PATH} ${DESTINATION_PATH}/${SRC_BASENAME}
rm -f ${SRC_FILE_AND_PATH}
cp -a ${DESTINATION_PATH}/${SRC_BASENAME} ${SRC_FILE_AND_PATH}
rm -f ${DESTINATION_PATH}/${SRC_BASENAME}

這將被呼叫:

find /path/to/move -type f -exec safe_move.sh {} \;

有什麼想法或更正嗎?

  • 我確實發現了一個問題,由於修改了文件夾的子文件夾,這將改變文件夾日期…… hrm。不知道如何克服這一點。

考慮tar-p( --preserve) 一起使用。這樣你也有一個很好的 tarball 可以保存……你知道……以防萬一。我知道不會留下任何元數據。如果發現我錯了,我也不承擔任何責任。=)

**編輯:**符號連結日期不會被保留!***看?!***永遠不要相信擁有 root 權限的貓。

其他選項包括cplv但您沒有至少與源大小相同的捲組。cpdup也。如果它們都在同一個卷組上,rsync可能是一種選擇。

我注意到你已經用 FreeBSD 標籤標記了它。如果 FreeBSD 是您的作業系統,那麼

dump -0 -f /path/to/destination/file /what/to/dump

您將需要的其他命令是

newfs /dev/ada0p1
mount /dev/ada0p1 /mnt
cd /mnt
restore -r -f /path/to/destination/file

您想用適合您系統的設備節點替換這些設備節點。此外,您要堅持轉儲整個分區並避免轉儲分區的一部分。

引用自:https://serverfault.com/questions/384020