2021年6月14日 星期一

用rsync, tar, cpio備份,比較時間戳記

比較幾種備份方式,在保存資料夾/檔案/連結的修改時間(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_

沒有留言:

張貼留言