[Системное администрирование, IT-инфраструктура, Хранение данных] Копирование томов на СХД через Linux сервер с использованием XCOPY
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Бывает, что нужно получить полную копию тома в рамках одной системы хранения данных (СХД), не снимок, клон, а именно полноценный том. Но не всегда СХД дает это сделать внутри себя собственными средствами. Вроде единственный вариант копировать через сервер, но при этом весь объем данных будет гоняться через сам сервер, сеть до СХД и порты СХД, нагружая все эти компоненты. Но есть SCSI команды, которые могут позволить сделать все в рамках самой СХД и если ваша система поддерживает VAAI от VMware, то практически 100%, что поддерживается команда XCOPY (EXTENDED COPY), которая и говорит массиву что и куда скопировать, не вовлекая в этот процесс сервер и сеть.
Вроде как все должно быть просто, но так сходу я готовых скриптов не нашел, пришлось изобретать велосипед. Для ОС сервера был выбран Linux, а в качестве средства копирования команда ddpt (http://sg.danny.cz/sg/ddpt.html). Копировать с помощью такой комбинации можно любые тома от любой ОС, поскольку копирование идет поблочно на стороне СХД. Поскольку надо копировать поблочно, а количество блоков надо посчитать, то для подсчета количества таких итераций использовалась команда blockdev. Максимальный размер блока был получен опытным путем, с большим блоком ddpt не работал по факту. В итоге получился следующий довольно простой скрипт:
#!/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
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
Давайте сделаем небольшую проверку! Ну как небольшую, 1ТБ файл создавался небыстро :)
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: wrong fs type, bad option, bad superblock on /dev/mapper/mpathfs, missing codepage or helper program, or other error.
root@sales-demo-05:/home/vasilyk# mkfs /dev/mapper/mpathfs
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 314572800 4k blocks and 78643200 inodes
Filesystem UUID: bed3ea00-c181-4b4e-b52e-d9bb498be756
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
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 </dev/urandom > /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: wrong fs type, bad option, bad superblock on /dev/mapper/mpathfr, missing codepage or helper program, or other error.
root@sales-demo-05:/home/vasilyk# cat xcopy.sh
#!/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
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.657s
Что в этот момент происходило на СХД:
Продолжим с Линуксом.
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# tail /xcopy_dest/1TB_file | strings
.;Dj
FcSxz
DHIW
~oz(
Eiok
5+9k
gG7PZ
BukF{IQ
?HW%Y
pt[c$
|Xe,
jV{a
o:a'
H<qD
@5:]
IeEr
f(:H
^;xr
v3F'
NQ|E
\t)?m
ErKP
[7zQB
[\?ut
tme@
w=zO
*T3!
root@sales-demo-05:/home/vasilyk# tail /xcopy_source/1TB_file | strings
.;Dj
FcSxz
DHIW
~oz(
Eiok
5+9k
gG7PZ
BukF{IQ
?HW%Y
pt[c$
|Xe,
jV{a
o:a'
H<qD
@5:]
IeEr
f(:H
^;xr
v3F'
NQ|E
\t)?m
ErKP
[7zQB
[\?ut
tme@
w=zO
*T3!
root@sales-demo-05:/home/vasilyk#
Все получилось, но тестируйте и используйте на свой страх и риск! Как исходный том лучше брать снепшоты, для начала.
===========
Источник:
habr.com
===========
Похожие новости:
- [Системное администрирование, DevOps, Облачные сервисы] Как спокойно спать, когда у вас облачный сервис: основные архитектурные советы (перевод)
- [Open source, Системное администрирование, PostgreSQL, IT-инфраструктура] Мониторинг PostgreSQL с использованием Zabbix
- [Информационная безопасность, IT-инфраструктура, Сетевые технологии] В Беларуси блокируются сайты *.github.io
- [Системное программирование, Сетевые технологии, Серверное администрирование] Мониторинг вашей инфраструктуры с помощью Grafana, InfluxDB и CollectD (перевод)
- [Информационная безопасность, Системное администрирование, Сетевые технологии] 4. Check Point SandBlast Agent Management Platform. Политика Data Protection. Deployment и Global Policy Settings
- [Системное администрирование, Серверное администрирование, DevOps, Kubernetes] Что такое Docker: краткий экскурс в историю и основные абстракции
- [IT-инфраструктура, Сетевые технологии, Софт, Сетевое оборудование] Вебинар Solarwinds и что у них нового в последней версии 2020.2
- [Высокая производительность, IT-инфраструктура] О переезде с Redis на Redis-cluster
- [Системное администрирование, Серверное администрирование, Puppet] Инфраструктура как код в Авито: уроки, которые мы извлекли
- [Системное администрирование, Виртуализация, Серверное администрирование, Софт] VDDK errors с человеческим лицом
Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_itinfrastruktura (IT-инфраструктура), #_hranenie_dannyh (Хранение данных), #_shd (схд), #_infrastruktura (инфраструктура), #_infrastruktura_tsod (инфраструктура цод), #_arhitektura_tsod (архитектура цод), #_sistemnoe_administrirovanie (
Системное администрирование
), #_itinfrastruktura (
IT-инфраструктура
), #_hranenie_dannyh (
Хранение данных
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:28
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Бывает, что нужно получить полную копию тома в рамках одной системы хранения данных (СХД), не снимок, клон, а именно полноценный том. Но не всегда СХД дает это сделать внутри себя собственными средствами. Вроде единственный вариант копировать через сервер, но при этом весь объем данных будет гоняться через сам сервер, сеть до СХД и порты СХД, нагружая все эти компоненты. Но есть SCSI команды, которые могут позволить сделать все в рамках самой СХД и если ваша система поддерживает VAAI от VMware, то практически 100%, что поддерживается команда XCOPY (EXTENDED COPY), которая и говорит массиву что и куда скопировать, не вовлекая в этот процесс сервер и сеть. Вроде как все должно быть просто, но так сходу я готовых скриптов не нашел, пришлось изобретать велосипед. Для ОС сервера был выбран Linux, а в качестве средства копирования команда ddpt (http://sg.danny.cz/sg/ddpt.html). Копировать с помощью такой комбинации можно любые тома от любой ОС, поскольку копирование идет поблочно на стороне СХД. Поскольку надо копировать поблочно, а количество блоков надо посчитать, то для подсчета количества таких итераций использовалась команда blockdev. Максимальный размер блока был получен опытным путем, с большим блоком ddpt не работал по факту. В итоге получился следующий довольно простой скрипт: #!/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 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 Давайте сделаем небольшую проверку! Ну как небольшую, 1ТБ файл создавался небыстро :) 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: wrong fs type, bad option, bad superblock on /dev/mapper/mpathfs, missing codepage or helper program, or other error. root@sales-demo-05:/home/vasilyk# mkfs /dev/mapper/mpathfs mke2fs 1.44.1 (24-Mar-2018) Discarding device blocks: done Creating filesystem with 314572800 4k blocks and 78643200 inodes Filesystem UUID: bed3ea00-c181-4b4e-b52e-d9bb498be756 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done 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 </dev/urandom > /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: wrong fs type, bad option, bad superblock on /dev/mapper/mpathfr, missing codepage or helper program, or other error. root@sales-demo-05:/home/vasilyk# cat xcopy.sh #!/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 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.657s Что в этот момент происходило на СХД: Продолжим с Линуксом. 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# tail /xcopy_dest/1TB_file | strings .;Dj FcSxz DHIW ~oz( Eiok 5+9k gG7PZ BukF{IQ ?HW%Y pt[c$ |Xe, jV{a o:a' H<qD @5:] IeEr f(:H ^;xr v3F' NQ|E \t)?m ErKP [7zQB [\?ut tme@ w=zO *T3! root@sales-demo-05:/home/vasilyk# tail /xcopy_source/1TB_file | strings .;Dj FcSxz DHIW ~oz( Eiok 5+9k gG7PZ BukF{IQ ?HW%Y pt[c$ |Xe, jV{a o:a' H<qD @5:] IeEr f(:H ^;xr v3F' NQ|E \t)?m ErKP [7zQB [\?ut tme@ w=zO *T3! root@sales-demo-05:/home/vasilyk# Все получилось, но тестируйте и используйте на свой страх и риск! Как исходный том лучше брать снепшоты, для начала. =========== Источник: habr.com =========== Похожие новости:
Системное администрирование ), #_itinfrastruktura ( IT-инфраструктура ), #_hranenie_dannyh ( Хранение данных ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:28
Часовой пояс: UTC + 5