比較幾種備份方式,在保存資料夾/檔案/連結的修改時間(timestamp)都沒有完美的方案。測試過程如下:先用下面的指令做出一個要被備份的資料夾
cd /tmp
mkdir src && sleep 1.5
touch src/f1 && sleep 1.5
mkdir src/d2 && sleep 1.5
touch src/d2/f2.1 && sleep 1.5
mkdir src/d2/d2.2 && sleep 1.5
touch src/d2/d2.2/f2.2.1 && sleep 1.5
mkdir src/d3 && sleep 1.5
mkdir src/d3/d3.2 && sleep 1.5
mkdir src/d3/d3.2/d3.2.1 && sleep 1.5
mkdir src/d3/d3.2/d3.2.2 && sleep 1.5
touch src/d3/d3.2/d3.2.2/f3.2.2.1 && sleep 1.5
cd src
ln -s d2/f2.1 s4
ln -s d3/d3.2 s5
cd .. && tree src
資料夾會長成這樣
src
|-- d2
| |-- d2.2
| | `-- f2.2.1
| `-- f2.1
|-- d3
| `-- d3.2
| |-- d3.2.1
| `-- d3.2.2
| `-- f3.2.2.1
|-- f1
|-- s4 -> d2/f2.1
`-- s5 -> d3/d3.2
列出每個檔案/資料夾/連結的時間戳記
cd /tmp
find src -exec ls -ld --full-time {} \;
方法1:rsync
cd /tmp && mkdir rsync
rsync -avubpt src/ rsync/
find rsync -exec ls -ld --full-time {} \;
- 資料夾timestamp不是原本的,有時候對有時候不對...
- 檔案的timestamp是對的,但只取到秒,毫秒就都為0
- 軟連結的timestamp是對的,但只取到秒,毫秒就都為0
方法2:tar
cd /tmp && mkdir tar
cd src
tar --format=posix -cpf - ./ | tar xf - -C ../tar/ --atime-preserve
cd ..
find tar -exec ls -ld --full-time {} \;
- 資料夾timestamp是對的
- 檔案的timestamp是對的
- 軟連結的timestamp不是原本的
方法3:cpio
cd /tmp && mkdir cpio
cd /tmp/src
find . -xdev | cpio -pmv --preserve-modification-time ../cpio/
cd ..
find cpio -exec ls -ld --full-time {} \;
- 資料夾timestamp不是原本的
- 檔案的timestamp是對的,但只取到秒,毫秒就都為0
- 軟連結的timestamp不是原本的
結論:硬要選一個的話,在本地端轉移用tar,遠端轉移再用rsync吧...
_EOF_
沒有留言:
張貼留言