Előfordul, hogy teljes másolatot kell készíteni egy tömbből egyetlen tárolási rendszer keretein belül, nem pillanatképet, másolatot, hanem valódi kötetet. De nem mindig lehetséges, hogy a tárolási rendszer saját eszközeivel ezt megtegye. Úgy tűnik, az egyetlen lehetőség a szerveren keresztüli másolás, de ezzel az összes adatforgalmat a szerveren, a tároló rendszerhez vezető hálózaton és a tárolási portokon keresztül kell lenyomni, megterhelve ezeket az összetevőket. De vannak SCSI parancsok, amelyek lehetővé tehetik az egész folyamat végrehajtását a tárolási rendszeren belül, és ha a rendszer támogatja a VMware VAAI-t, akkor szinte 100% biztos, hogy támogatott a XCOPY (KITERJESZTETT MÁSOLÁS) parancs, amely közvetlenül megmondja a tömbnek, hogy mit és hova kell másolni anélkül, hogy bevonná a folyamatba. szerver és a hálózatot.
Úgy tűnik, minden egyszerűnek kellene lennie, de így hirtelen nem találtam kész szkripteket, ezért magamnak kellett feltalálnom a biciklit. Az OS a szerver kiválasztásra került a Linux, és másolásra a ddpt parancsot (http://sg.danny.cz/sg/ddpt.html) használtam. Ezzel a kombinációval bármilyen kötetet másolhatunk bármilyen operációs rendszerből, mivel a másolás szektor szerint zajlik a tárolási rendszer oldalán. Mivel szektor szerint kell másolni, és a szektorok számát meg kell számolni, a blockdev parancsot használtuk a számlálásra. A maximális blokk méretét tapasztalati úton határoztuk meg, mert nagyobb blokk esetén a ddpt nem működött. Ennek eredményeképpen egy meglehetősen egyszerű szkript született:
#!/bin/bash
# first parameter = input device
# second parameter = output device
# device size must be the same
# changing bs variable can reduce speed, max speed should be at bs=32768. 32768 is max setting, lower settings should be calculated dividing by 2
set -o nounset
bs=32768
s=`blockdev --getsz $1`
i=0
while [ $i -le $s ]
do
ddpt of=$2 bs=512 oflag=xcopy,direct if=$1 iflag=xcopy,direct count=$bs verbose=-1 skip=$i seek=$i
i=$(( $i+$bs ))
doneCsináljunk egy kis ellenőrzést! Nos, nem is olyan kis, 1TB fájlt készítettünk és az md5sum ellenőrzése nem volt éppen gyors 🙂
root@sales-demo-05:\/home\/vasilyk# blockdev --getsz \/dev\/mapper\/mpathfs
2516582400
root@sales-demo-05:\/home\/vasilyk# blockdev --getsz \/dev\/mapper\/mpathfr
2516582400
root@sales-demo-05:\/home\/vasilyk# mount \/dev\/mapper\/mpathfs \/xcopy_source\/
mount: \/xcopy_source: rossz fájlrendszer típusa, hibás opció, hibás szuperblokk a \/dev\/mapper\/mpathfs-en, hiányzó kódoldal vagy segédprogram, vagy más hiba.
root@sales-demo-05:\/home\/vasilyk# mkfs \/dev\/mapper\/mpathfs
mke2fs 1.44.1 (24-Már-2018)
Eszközblokkok eldobása: kész
Fájlrendszer létrehozása 314572800 4k blokk és 78643200 inode mérettel
Fájlrendszer UUID: bed3ea00-c181-4b4e-b52e-d9bb498be756
A szuperblokk visszaállítások elmentve a blokkokon:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Csoporttáblák allokálása: kész
Inode táblák írása: kész
Szuperblokkok és fájlrendszer számlálási információk írása: kész
root@sales-demo-05:\/home\/vasilyk# mount \/dev\/mapper\/mpathfs \/xcopy_source\/
root@sales-demo-05:\/home\/vasilyk# ls -l \/xcopy_source\/
total 16
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
root@sales-demo-05:\/home\/vasilyk# head -c 1T \/xcopy_source\/1TB_file
root@sales-demo-05:\/home\/vasilyk# ls -l \/xcopy_source\/
total 1074791444
-rw-r--r-- 1 root root 1099511627776 Aug 19 17:25 1TB_file
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
root@sales-demo-05:\/home\/vasilyk# umount \/xcopy_source
root@sales-demo-05:\/home\/vasilyk# mount \/dev\/mapper\/mpathfr \/xcopy_dest\/
mount: \/xcopy_dest: rossz fájlrendszer típusa, hibás opció, hibás szuperblokk a \/dev\/mapper\/mpathfr-en, hiányzó kódoldal vagy segédprogram, vagy más hiba.
root@sales-demo-05:\/home\/vasilyk# cat xcopy.sh
#!\/bin\/bash
# az első paraméter = bemeneti eszköz
# második paraméter = kimeneti eszköz
# az eszköz mérete ugyanaz kell hogy legyen
# a bs változó megváltoztatása csökkentheti a sebességet, a maximális sebesség bs=32768 értéknél
bs=32768
s=`blockdev --getsz $1`
i=0
while [ $i -le $s ]
do
ddpt of=$2 bs=512 oflag=xcopy,direct if=$1 iflag=xcopy,direct count=$bs verbose=-1 skip=$i seek=$i
i=$(( $i+$bs ))
done
root@sales-demo-05:\/home\/vasilyk# time .\/xcopy.sh \/dev\/mapper\/mpathfs \/dev\/mapper\/mpathfr
real 11m30.878s
user 2m3.000s
sys 1m11.657sMi történt ekkor a tárolórendszerben:

Folytassuk a Linux-szal.
root@sales-demo-05:\/home\/vasilyk# mount \/dev\/mapper\/mpathfr \/xcopy_dest\/
root@sales-demo-05:\/home\/vasilyk# ls -l \/xcopy_dest\/
total 1074791444
-rw-r--r-- 1 root root 1099511627776 Aug 19 17:25 1TB_file
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
root@sales-demo-05:\/home\/vasilyk# mount \/dev\/mapper\/mpathfs \/xcopy_source\/
root@sales-demo-05:\/home\/vasilyk# md5sum \/xcopy_source\/1TB_file
53dc6dfdfc89f099c0d5177c652b5764 \/xcopy_source\/1TB_file
root@sales-demo-05:\/home\/vasilyk# md5sum \/xcopy_dest\/1TB_file
53dc6dfdfc89f099c0d5177c652b5764 \/xcopy_dest\/1TB_file
root@sales-demo-05:\/home\/vasilyk#Minden rendben ment, de teszteljen és használja saját felelősségére! A forrás volumet inkább pillanatképekből vegye.
Forrás: habr.com
