Kopjimi volumeneve në SCSI përmes serverit Linux me përdorimin e XCOPY

Ndonjëherë, është e nevojshme të merrni një kopje të plotë të volumit brenda një sistemi të vetëm të ruajtjes së të dhënave (SCSI), jo një snapshot, një kopje të plotë, por pikërisht një volum të plotë. Megjithatë, SCSI nuk gjithmonë e lejon këtë brenda vetes me mjetet e saj. Duket se e vetmja mundësi është të kopjoni përmes serverit, por gjatë kësaj, e gjithë sasia e të dhënave do të kalojë përmes vetë serverit, rrjetit deri te SCSI dhe porteve të SCSI, duke ngarkuar të gjithë këto komponente. Por ekzistojnë komanda SCSI që mund të lejojnë të bëhen të gjitha brenda SCSI dhe nëse sistemi juaj mbështet VAAI nga VMware, është praktikisht 100% që komanda XCOPY (KOPJIMI I ZGJATUR) mbështetet, e cila i thotë arrays se çfarë dhe ku të kopjojë, pa e përfshirë këtë proces. server dhe rrjeti.

Duket se gjithçka duhet të jetë e thjeshtë, por ashtu në mënyrë të menjëhershme nuk gjetëm skript të gatshëm, kështu që më duhej të shpik një biçikletë. Për OS serverit u zgjodh Linux, dhe si mjet kopjimi komandën ddpt (http://sg.danny.cz/sg/ddpt.html). Të kopjosh me këtë kombinim mund të kopjosh volumet nga çdo OS, pasi kopjimi ndodh bllok-pas-blloku në anën e SCSI. Pasi duhet të kopjosh bllok-pas-blloku, dhe numri i blloqeve duhet llogaritur, komanda blockdev u përdor për të llogaritur numrin e këtyre iteracioneve. Madhësia maksimale e bllokut u mor në mënyrë eksperimentale, me një bllok më të madh ddpt nuk funksiononte në fakt. Në fund, doli ky skript i thjeshtë:

#!/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 ))
done

Le të bëjmë një verifikim të vogël! Epo, si një të vogël, një skedë 1TB u krijua dhe u kontrollua md5sum jo të shpejtë 🙂

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: tipi fs gabim, opsion i keq, superblock gabim në /dev/mapper/mpathfs, kodi i rëndësishëm ose programi ndihmës mungon, ose gabim tjetër.
root@sales-demo-05:/home/vasilyk# mkfs /dev/mapper/mpathfs
mke2fs 1.44.1 (24-Mar-2018)
Po hiqen blloqet e pajisjes: e bërë
Duke krijuar sistemin e skedarëve me 314572800 blloqe 4k dhe 78643200 inode
UUID i sistemit të skedarëve: bed3ea00-c181-4b4e-b52e-d9bb498be756
Backup-et e superblock-it të ruajtura në blloqet:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

Duke alokuar tabelat e grupeve: e bërë
Duke shkruar tabelat e inode: e bërë
Duke shkruar superblock-et dhe informacionin e llogarisë së sistemit të skedarëve: e bërë

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: tipi fs gabim, opsion i keq, superblock gabim në /dev/mapper/mpathfr, kodi i rëndësishëm ose programi ndihmës mungon, ose gabim tjetër.
root@sales-demo-05:/home/vasilyk# cat xcopy.sh
#! /bin/bash
# parametri i parë = pajisja hyrëse
# parametri i dytë = pajisja dalëse
# madhësia e pajisjes duhet të jetë e njëjtë
# ndryshimi i variablës bs mund të zvogëlojë shpejtësinë, shpejtësia maksimale duhet të jetë në bs=32768. 32768 është vendosja maksimale, vendosjet më të ulëta duhet të llogariten duke e ndarë me 2

bs=32768
s=`blockdev --getsz $1`
i=0
while [ $i -le $s ]
do

ddpt of=$2 bs=512 oflag=xcopy,direkt if=$1 iflag=xcopy,direkt 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.657s

Çfarë po ndodhte në këtë moment në SHT:

Kopjimi volumeneve në SCSI përmes serverit Linux me përdorimin e XCOPY
Le të vazhdojmë me Linux-in.

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#

Gjithçka shkoi mirë, por testoni dhe përdorni me riskun tuaj! Është më mirë të merrni snapshot-e për volumet origjinale, fillimisht.

Burimi: habr.com

Bleni hostin e besueshëm për faqet me mbrojtje nga DDoS, VPS VDS servera 🔥 Bli hostin e besueshëm për faqet me mbrojtje nga DDoS, VPS VDS servera | ProHoster