Показаны сообщения с ярлыком dd. Показать все сообщения
Показаны сообщения с ярлыком dd. Показать все сообщения

пятница, 10 июня 2011 г.

Копирование файлов через SSH


Очень удобно оказывается копировать файлы используя консоль SSH

копирование с моей консоли на сервер
tar -zc -f - srcdir | ssh -C dstuser@dsthost.ru "cat > /home/dstuser/mybackup.tar.gz"
Архиватор будет выдавать архив в stdout (опция -f -), который через pipe-конвейер попадает в stdin SSH-клиента, а оттуда — прямо в сетевую SSH-сессию

или вот вариант копирование с сервера в мою консоль:
ssh -C srcuser@srchost "tar -zc -f - srcdir" |
dd of=/home/dstuser/mybackup.tar.gz

опять на сервер
dd if=/dev/cdrom bs=2048 | ssh -C dstuser@dsthost.ru
"dd of=/home/dstuser/mycd.iso"
и так далее можно извращаться как угодно :)


я чтобы не набирать постоянно пароли я сгенерю пару ключей:

$> ssh-keygen -t rsa

Утвердительно отвечаем на все вопросы и вводим пустую passphrase два раза, чтобы не вводить ее в качестве пароля (тем не менее, мы хорошо защищены асинхронным криптоалгоритмом, ключи для которого были сгенерированы только что). Затем кладем публичный ключ на удаленную машину:

$> cat ~/.ssh/id_rsa.pub | ssh dstuser@dsthost
"mkdir -p ~/.ssh && cat >>
~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600
~/.ssh/authorized_keys"

В ходе этой процедуры мы ввели пароль в последний раз, больше не потребуется. Обращаю особое внимание на смену прав на публичный ключ и каталог, содержащий его на стороне сервера. sshd — умный демон, и если доступ к публичному ключу получит кто-нибудь, кроме соответствующего пользователя, пользоваться ключом станет невозможно.

пятница, 25 марта 2011 г.

Резервное клонирование образов дисков

Для создания образа диска раньше я пользовался акронисом. Но теперь я стараюсь переходить на свободное ПО и вот на что я набрел http://clonezilla.org/
Мне утилитка понравилась своим большим набором возможностей
Клонирование дисков, сжатие в образы, бакуп по сети. Можно просто войти в шел и много чего делать ручками.

Скачать ISO образ можно тут http://clonezilla.org/downloads.php


Бекап (backup) при помощи dd.
Утилита dd есть в любом дистрибутиве, и вам не потребуются разные платные примочки типа Paragon backup или Symantec backup. То есть с помощью dd можно делать backup системы, в том числе backup сервера. Для этого так же потребуется любой архиватор, в данном примере это gzip. Приведён вариант с архивированием на другую машину по сети с использованием SSH или netcat.

1. Приготовления
Загружаемся с любого LiveCD диска с Linux / BSD, залогиниваемся под root-аккаунтом.
Убеждаемся, написав в консоли df, что ни один из тех разделов, что мы собираемся копировать, не примонтирована на запись. Решаем, куда будем архивировать данные: это может быть другой раздел на винчестере, внешний жёсткий диск или по сети.

2. Создаём резервную копию
В данном примере /dev/hda это винчестер, который архивируем, а /dev/sda1 - это раздел внешнего винчестера или другая партиция, на которую архивируем, hda.img.gz - получившийся сжатый файл-образ.

2.1 Внешний винчестер или другой раздел диска
Монтируем устройство, куда мы будем архивировать данные

    # mount -t vfat /dev/sda1 /mnt/sda1

Перегоняем данные с одного винчестера на другой. Так как данных много, полезно их сжать - и никс-системы позволяют это делать "на лету". В примере использван GZip, но подойдёт и любой другой (например, bzip2 или p7zip).
Для этого:

    # dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.img.gz

Здесь происходит архивирование с одновременным сжатием, результат чего записывается в файл hda.img.gz
Параметр "conv=sync,noerror" указывает dd не читать блок, если при этом происходит ошибка, но записать в архивируемый файл-образ данные, чтобы размер блока не менялся.
Параметр "bs=64K" это размер блока в килобайтах - использование такого большого размера блока ускоряет процесс копирования. Параметр bs можно сделать ещё больше, а именно равным размеру кеша копируемого диска (например bs=8m), это сильно ускорит весь процесс.
Выходной поток передаётся по конвейеру для сжатия gzip, результат выводится в файл на другом диске.

2.2 Удалённо по сети
Всё то же самое, что в п.2.1, но с добавлением в конвейер SSH:

    # dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | ssh -c blowfish user@hostname "dd of=hda.img.gz bs=64k"

Архивный файл появится в домашней директории пользователя user на машине hostname. Если сеть маленькая, лучше вместо hostname использовать просто ip-адрес. Опция -c blowfish заставляет SSH выбрать алгоритм шифрования Blowfish, который быстрее остальных шифрует данные.

Вариант с netcat, если данные копируются по локальной сети и шифрование не нужно:

    # dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | nc 192.168.1.1 3333

На удалённой машине должен быть запущен netcat:

    # nc -l -p 3333 > hda.img.gz

Вариант с SAMBA, если копирование производится на оффтопичную машину: примонтировать удалённо сетевой ресурс

    smbmount //192.168.1.100/shared /mnt/remoteshare -o username=имяпользователя,password=пароль

и далее всё то же, что и в п.2.1.

3. Восстанавливаем данные из бекапа
Пример тот же: /dev/hda это винчестер, который архивируем, hda.img.gz - архивный сжатый файл-образ, а /dev/sda1 - это раздел внешнего винчестера или другая партиция, с которого восстанавливаем данные.

3.1 Внешний винчестер или другой раздел диска
Копируем и распаковываем файл-образ одновременно:

    # gzip -x /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K

Все параметры в п.2 уже объяснены.

3.2 Удалённо по сети
Сетевой вариант с восстановлением из файл-образа:

dd if=hda.img.gz | ssh -c blowfish user@deadhost "gunzip -c | dd of=/dev/hda1 bs=64k"



Следует помнить, что в данном случае не следует использовать опцию conv=sync,noerror в опциях dd - если вы всё-таки включите эту опцию, в большинстве случаев это исказит записываемые данные (это заставляет dd не дожидаться данных, приходящих по сети, если целый блок недоступен)

Dump Restore

Именно для бэкапа в своё время были созданы утилиты dump/restore, которые, есть в любом дистрибутиве. Эти утилиты лишены перечисленных недостатков, кроме того, позволяют делать инкрементальный бэкап.
Перечитываем статью, заменяя dd на dump, и всё хорошо :)

Пример использования dump/restore с корневого раздела удалённой машины в текущую директорию (с файла будет немного по другому)

ssh backup-server.remote "dump -0af- /" | restore -xf .