Прехвърляне на sparse файлове под линукс
Здравейте,
Тук идеята е следната :
Имаме bare-metal сървър A и искаме да копираме виртуална машина от него на bare-metal сървър B. Ако виртуалната ни машина е голяма примерно 80GB и връзката между двете машини е на 1GB то трансфера ще отнеме около 20 минути.
Ако виртуалната ни машина реално е голяма 1GB, трансфера пак ще отнеме толкова, защото ние ще прехвърлим всичките 80GB – 79GB от които нули.
В този пост ще споделя начин с tar как да избегнем това досадно прехвърляне на излишни данни на sparse файлове.
Създаване на sparse файл
За теста създадох виртуална машина с големина на хард диска 80GB :
stat vm-101-disk-1.qcow2 File: vm-101-disk-1.qcow2 Size: 85912715264 Blocks: 26008 IO Block: 4096 regular file Device: fd02h/64770d Inode: 46792713 Links: 1 Access: (0640/-rw-r-----) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-09-12 09:30:28.543834708 +0300 Modify: 2018-09-12 09:29:06.787111495 +0300 Change: 2018-09-12 09:29:06.787111495 +0300 Birth: -
ls -lah
ми вади същата големина :
ls -lha vm-101-disk-1.qcow2 -rw-r----- 1 root root 81G Sep 12 09:29 vm-101-disk-1.qcow2
Обаче du -sh
ми показва реално заетото пространство :
du -sh vm-101-disk-1.qcow2 13M vm-101-disk-1.qcow2
Прехвърляне на sparse файл
Стандартните начини на копиране – cp или scp ще копират всичките 80GB :
scp vm-101-disk-1.qcow2 192.168.1.2:/var/lib/vz/ vm-101-disk-1.qcow2 0% 603MB 83.5MB/s 16:13 ETA
ETA (Estimated time of arrival) е 16-17 минути.
Обаче истинската големина на файла е 13M ?!??!? – 16минути??? 🙂
Ето как може да избегнем това с помощта на tar!
tar cvSzf - vm-101-disk-1.qcow2 | ssh 192.168.1.2 'cd /var/lib/vz/ ; tar xzf -'
Идеята е следната :
- c – създаваме архив
- v – виждаме всичко което се архивира
- S – sparse – решението на проблема ни! – (Handle sparse files efficiently)
- z – gzip
- f – името на файла
- x – extract-ваме архива
Така файла ни vm-101-disk-1.qcow2 който е голям 80GB а реалният му размер е 13MB го прехвърлихме на bare-metal сървър B за секунда 🙂
Това е много полезно за трансфери от отдалечени bare-metal сървъри на големи виртуални машини!
ПС. много е важно да се спазва последователността при tar, за да се избегне евентуално затриване на файла ни.
Специални благодарности на @Румен за идеята!