Linux dd копия всего диска по ssh

Как скопировать диск через SSH

ЗаметкаЕсли объем данных на вашем диске намного меньше размера диска, тогда загрузка копии с помощью dd может занять больше времени, чем просто загрузка ваших файлов. Если вы заинтересованы в загрузке отдельных файлов или каталогов, просмотрите варианты, перечисленные в наших руководствах « и « .

Скачать диск через SSH

Загрузитесь в Rescue Mode

  1. Подготовьте компьютер-получатель, проверив, установлен ли SSH. Большинство Linux / Unix-подобных систем по умолчанию включают OpenSSH в свои пакеты. Если принимающей системой является Microsoft Windows, доступно несколько решений SSH, таких как .
  2. Перезагрузите свой Линод в и подключитесь к нему, используя .
  3. Установите пароль администратора для системы восстановления и запустите сервер SSH:

Скопируйте и загрузите диск

  1. Скопируйте диск по SSH из VPS на принимающую машину. Замените 192.0.2.9 на IP-адрес VPS и /home/archive/VPS.img путь, по которому вы хотите сохранить диск.

ЗаметкаУстройство /dev/sda используется для Линод, работающих на KVM. Если ваш VPS все еще использует XEN, используйте его /dev/xvda в этом руководстве.

Принимающая машина подключится к Линоде. Проверьте отпечатки пальцев ключа SSH. Если допустимо, введите yes и нажмите Enter, чтобы продолжить:

Введите пароль root, который вы создали выше для спасательной системы:

Когда передача завершится, вы увидите итоговый вывод, подобный приведенному ниже:

Копирование вашего диска может занять некоторое время. Если у вас медленное интернет-соединение, добавьте -C опцию в команду SSH, чтобы включить сжатие gzip образа диска. Если вы получили Write failed: Broken pipe ошибку, повторите этот процесс.

Проверка диска

После завершения копирования проверьте его, смонтировав изображение на принимающем устройстве.

    Переключить пользователей root на принимающую машину:

Создайте каталог для монтирования диска как:

Смонтируйте диск. Замените VPS.img на название диска вашего Линода.

Перечислите каталоги на диске, чтобы указать, все ли перенесено. Ваш вывод ls похож на ниже:

Загрузить диск через SSH

Вы можете загрузить образ диска на новый сервер. Например, если вы ранее загрузили свой диск VPS и удалили VPS, чтобы остановить выставление счетов на нем, вы можете позднее создать новый VPS и загрузить диск для возобновления своих услуг.

  1. Подготовьте новый VPS, сначала создав новый диск подкачки. Выполнение этого в первую очередь означает, что вы можете просто использовать оставшееся пространство VPS для системного диска без каких-либо вычитаний. Размер диска подкачки обычно начинается с 256 МБ или 512 МБ, но может быть больше или меньше в зависимости от ваших потребностей.
  2. Получите доступ к своей Линоде через Менеджер Линод. Выберите « Создать новый диск» и выберите swap из выпадающего меню « Тип» .
  3. Теперь используйте оставшееся место на диске, чтобы создать системный диск, на который вы будете копировать образ диска. Введите описательное имя в поле « Метка» и убедитесь, что размер достаточно велик, чтобы вместить содержимое загружаемого диска. Нажмите Сохранить изменения .
  4. Перезагрузите свой линод в и запустите сервер SSH, как описано выше.
  5. Загрузите диск по SSH в VPS. Замените 192.0.2.9 на IP-адрес VPS и путь к образу /home/archive/VPS.img диска.

Когда передача завершится, вы увидите итоговый вывод, подобный приведенному ниже:

Копирование вашего диска может занять некоторое время. Если вы получили Write failed: Broken pipe ошибку, повторите этот процесс.

Разверните Filesystem

Если диск, созданный вами на новом сервере, больше, чем исходный диск (например, вы переносите диск с меньшего VPS на больший VPS), вам придется изменить размер файловой системы, чтобы использовать новое пространство.
Вы можете проверить, нужно ли это, сравнив пространство файловой системы с пространством нового диска:

В приведенном выше примере значения в столбце Размер не совпадают. Хотя диск имеет 30 ГБ, файловая система может видеть только 24 ГБ.
Чтобы использовать все доступное пространство на новом диске, выполните следующие действия в режиме восстановления. Замените /dev/sdx его на идентификатор устройства вашего системного диска (/ dev / sda, / dev / sdb и т. Д.).

Источник

Как настроить клонирование дисков с помощью dd, netcat и ssh tunnel?

Я хотел бы скопировать материал в больших количествах (используя образ диска dd ) с netcat с хоста A на B через зашифрованный канал ssh в Linux.

Какие команды я должен набрать на обоих концах?

Копирование из источника в цель, где на цели работает sshd:

  • dd if=/dev/sda | gzip | ssh root@target ‘gzip -d | dd of=/dev/sda’

Копирование из источника в цель через sshd_host, когда цель не работает sshd.

  • Цель: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • Источник: ssh -L 62222:target:62222 sshd_host &

Источник: dd if=/dev/sda | nc -w 3 localhost 62222

ddif = это источник, of = это пункт назначения, bs = это размер блока. Различные размеры блоков могут улучшить производительность. 16 обычно довольно разумная отправная точка. Вы также можете использовать count =, чтобы указать, сколько блоков копировать.

nc-p указывает порт, который будет использоваться для служб. -l используется для запуска службы. -w устанавливает время ожидания данных в трубопроводе перед выходом.

ssh-L устанавливает туннель на удаленном хосте. Формат аргумента, local_port:target_host:target_port . Ваша локальная программа (nc) подключается к local_port, это подключение туннелируется и подключается к target_port на target_host.

Определенные параметры — только те, которые используются для этого. Посмотрите справочные страницы для более подробной информации.

  1. Если вы делаете это для чего-либо, кроме локальной сети, я бы посоветовал сжать поток данных с помощью gzip или compress. Bzip2 тоже будет работать, но это займет немного больше процессорного времени. Первый имеет пример такого использования.
  2. Лучше, если исходный раздел не смонтирован или смонтирован только для чтения. Если нет, вам понадобится fsck конечного изображения.
  3. Если на одной из машин нет netcat, но нет ssh, то здесь нет необходимости в netcat. Этот случай будет выглядеть так:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. dd работает лучше всего, если источник и цели имеют одинаковый размер. Если нет, цель должна быть больше из 2.
  2. Если вы используете ext2 / 3 или xfs, дамп (или xfsdump) и восстановление могут быть лучшим вариантом. Он не будет обрабатывать загрузочный сектор, но работает, когда цель и источник имеют разные размеры.

Источник

Команда dd и все, что с ней связано


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

Начну с небольшого примера, наглядно иллюстрирующего основные параметры команды:

# dd if=/dev/urandom of=/dev/null bs=100M count=5

Параметры:

  • if: указывает на источник, т.е. на то, откуда копируем. Указывается файл, который может быть как обычным файлом, так и файлом устройства.
  • of: указывает на файл назначения. То же самое, писать можем как в обычный файл, так и напрямую в устройство.
  • bs: количество байт, которые будут записаны за раз. Можно представлять этот аргумент как размер куска данные, которые будут записаны или прочитаны, а количество кусков регулируется уже следующим параметром.
  • count: как раз то число, которое указывает: сколько кусочков будет скопировано.

Таким образом, описанная команда читает 5*100 мегабайт из устройства /dev/urandom в устройство /dev/null. Придавая этой команде смысловую нагрузку получается, что система сгенерирует 500 мегабайт случайных значений и запишет их в null устройство. Конечно, единственное, что сделает эта команда: нагрузит процессор на несколько секунд. Рассмотрим примеры из практики:

Создание образа диска:

# dd if=/dev/cdrom of=image.iso

Команда будет считывать из устройства данные и записывать в файл до тех пор, пока не достигнет окончания устройства. Если диск битый, можно попробовать его прочитать, игнорируя ошибки чтения:

# dd if=/dev/cdrom of=image.iso conv=noerror

Параметр «conv» позволяет подключать несколько фильтров, применимых к потоку данных. Фильтр «noerror» как раз отключает остановку работы программы, когда наткнется на ошибку чтения. Таким образом, некоторые данные с диска все же можно будет прочитать. Точно таким образом я спас данные со своей флешки Corsair, которую погнули: подобрал подходящее положение, когда контакт есть, и сделал дамп файловой системы.
Подключить, кстати, такие образы можно при помощи команды mount с ключем «-o loop»:

# mount -o loop image.iso /mnt/image

Если что-то не получается, процесс разбивается на 2 уровня:

# losetup -e /dev/loop0 image.iso
# mount /dev/loop0 /mnt/image

Если и так не работает, значит файловая система образа полетела.

Работа с носителями информации

Очень простое, хоть и не оптимальное решение клонирования жесткого диска:

# dd if=/dev/sda of=/dev/sdb bs=4096

Все то же побайтовой копирование с размером буфера 4 Кб. Минус способа в том, что при любой заполненности разделов копироваться будут все биты, что не выгодно при копировании разделов с маленькой заполненностью. Чтобы уменьшить время копирования при манипуляции с большими объемами данных, можно просто перенести MBR на новый носитель (я ниже опишу как), перечитать таблицу разделов ядра (при помощи того же fdisk), создать файловые системы и просто скопировать файлы (не забыв сохранить права доступа к файлам).

Как вариант, можно даже по расписанию делать бекап раздела по сети. Разрулив ключи ssh будет работать такая схема:

# dd if=/dev/DEVICE | ssh user@host «dd of=/home/user/DEVICE.img».

Когда-то читал исследование, согласно которому очень большая доля жестких дисков на барахолке подвергается восстановлению данных без привлечения чего-то специализированного, и содержит конфиденциальную информацию. Чтобы на носителе ничего нельзя было восстановить — можно забить его нулями:

# dd if=/dev/zero of=/dev/DEVICE

Думаю, понятно на что нужно заменить DEVICE. После проведения лекций по Linux, я очень тщательно стал следить за тем, что пишу.
Проверить можно тем же dd, но преобразовав данные в hex:

# dd if=/dev/sda | hexdump -C

Должны посыпаться нули.

MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары доп. байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап выполняется так:

# dd if=/dev/sda of=mbr.img bs=512 count=1

Восстановить можно проще:

# dd if=mbr.img of=/dev/sda

Причины этих махинаций с MBR могут быть разные, однако хочу рассказать одну особенность, взятую из опыта: после восстановления давней копии MBR, где один из разделов был ext3, а позже стал FAT и использовался Windows, раздел перестал видиться виндой. Причина — ID раздела, который хранится в MBR. Если UNIX монтирует файловые системы согласно суперблоку, то винды ориентируются на ID разделов из MBR. Поэтому всегда нужно проверять ID разделов при помощи fdisk, особенно если на компьютере есть винды.

При помощи dd можно генерировать файлы, а затем использовать их как контейнеры других файловых систем даже в зашифрованном виде. Технология следующая:
При помощи dd создается файл, забитый нулями (случайными числами забивать не рационально: долго и бессмысленно):

# dd if=/dev/zero of=image.crypted bs=1M count=1000

Создался файл размером почти в гигабайт. Теперь нужно сделать этот файл блочным устройством и, при этом, пропустить его через механизм шифрования ядра linux. Я выберу алгоритм blowfish. Подгрузка модулей:

# modprobe cryptoloop
# modprobe blowfish

Ассоциация образа с блочным устройством со включенным шифрованием:

# losetup -e blowfish /dev/loop0 image.crypted

Команда запросит ввести пароль, который и будет ключем к образу. Если ключ введен не правильно, система не смонтируется. Можно будет заново создать данные в образе, используя новый ключ, но к старым данным доступа не будет.
Создаем файловую систему и монтируем:

# mkfs.ext2 /dev/loop0
# mount /dev/loop0 /mnt/image

Образ готов к записи данных. После завершения работы с ним, нужно не забыть его отмонтировать и отключить от блочного loop устройства:

# umount /dev/loop0
# losetup -d /dev/loop0

Теперь шифрованный образ готов.

Основные идеи я расписал, однако множество задач, которые можно решить при помощи маленькой программки, имя которой состоит из двух букв, намного шире. Программа «dd» — яркий пример того, что IT’шники называют «UNIX way»: одна программа — часть механизма, выполняет исключительно свою задачу, и выполняет ее хорошо. В руках человека, который знает свое дело, которому свойственен не стандартный подход к решению задачи, такие маленькие программки помогут быстро и эффективно решать комплексные задачи, которые, на первый взгляд, должны решать крупные специализированные пакеты.

Источник

Команда dd Linux

Довольно часто системным администраторам приходится копировать различные двоичные данные. Например, иногда может понадобиться сделать резервную копию жесткого диска, создать пустой файл, заполненный нулями для организации пространства подкачки или другой виртуальной файловой системы.

Для решения всех этих задач используется утилита dd linux, которая просто выполняет копирование данных из одного места в другое на двоичном уровне. Она может скопировать CD/DVD диск, раздел на диске или даже целый жесткий диск. В этой статье мы рассмотрим что из себя представляет команда dd linux, основные ее опции и параметры, а также как ею пользоваться.

Как работает команда dd?

Сначала нужно понять как работает команда dd и что она делает. Фактически, это аналог утилиты копирования файлов cp только для блочных данных. Утилита просто переносит по одному блоку данных указанного размера с одного места в другое. Поскольку в Linux все, в том числе, устройства, считается файлами, вы можете переносить устройства в файлы и наоборот.

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

Команда dd

Синтаксис утилиты достаточно необычен, но в то же время очень прост, после того как вы его запомните и привыкнете:

$ dd if= источник_копирования of= место_назначения параметры

С помощью параметра if вам нужно указать источник, откуда будут копироваться блоки, это может быть устройство, например, /dev/sda или файл — disk.img. Дальше, с помощью параметра of необходимо задать устройство или файл назначения. Другие параметры имеют такой же синтаксис, как if и of.

Теперь давайте рассмотрим дополнительные параметры:

  • bs — указывает сколько байт читать и записывать за один раз;
  • cbs — сколько байт нужно записывать за один раз;
  • count — скопировать указанное количество блоков, размер одного блока указывается в параметре bs;
  • conv — применить фильтры к потоку данных;
  • ibs — читать указанное количество байт за раз;
  • obs — записывать указанное количество байт за раз;
  • seek — пропустить указанное количество байт в начале устройства для чтения;
  • skip — пропустить указанное количество байт в начале устройства вывода;
  • status — указывает насколько подробным нужно сделать вывод;
  • iflag, oflag — позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.

Это были все основные опции, которые вам могут понадобиться. Теперь перейдем ближе к практике и рассмотрим несколько примеров как пользоваться утилитой dd linux.

Как пользоваться dd?

Обычные пользователи используют команду dd чаще всего для создания образов дисков DVD или CD. Например, чтобы сохранить образ диска в файл можно использовать такую команду:

sudo dd if=/dev/sr0 of=

/CD.iso bs=2048 conv=noerror

Фильтр noerror позволяет отключить реагирование на ошибки. Дальше, вы можете создать образ жесткого диска или раздела на нем и сохранить этот образ на диск. Только смотрите не сохраните на тот же жесткий диск или раздел, чтобы не вызвать рекурсию:

В вашей домашней папке будет создан файл с именем disk1.img, который в будущем можно будет развернуть и восстановить испорченную систему. Чтобы записать образ на жесткий диск или раздел достаточно поменять местами адреса устройств:

Очень важная и полезная опция — это bs. Она позволяет очень сильно влиять на скорость работы утилиты. Этот параметр позволяет установить размер одного блока при передаче данных. Здесь нужно задать цифровое значение с одним из таких модификаторов формата:

  • с — один символ;
  • b — 512 байт;
  • kB — 1000 байт;
  • K — 1024 байт;
  • MB — 1000 килобайт;
  • M — 1024 килобайт;
  • GB — 1000 мегабайт;
  • G — 1024 мегабайт.

Команда dd linux использует именно такую систему, она сложная, но от этого никуда не деться. Ее придется понять и запомнить. Например, 2b — это 1 килобайт, и 1k, это тоже 1 килобайт, 1М — 1 мегабайт. По умолчанию утилита использует размер блока — 512 байт. Например, чтобы ускорить копирование диска можно брать блоки размером по 5 мегабайт. Для этого применяется такая команда:

Следующий параметр — это count. С помощью него можно указать сколько блоков необходимо скопировать. Например, мы можем создать файл размером 512 мегабайт, заполнив его нулями из /dev/zero или случайными цифрами из /dev/random:

sudo dd if=/dev/zero of=file.img bs=1M count=512

Обратите внимание, что этот параметр указывает не размер в мегабайтах, а всего лишь количество блоков. Поэтому, если вы укажите размер блока 1b, то для создания файла размером 1Кб нужно взять только два блока. С помощью этого параметра также можно сделать резервную копию таблицы разделов MBR. Для этого скопируем в файл первые 512 байт жесткого диска:

sudo dd if=/dev/sda of=mbr.img bs=1b count=1

Для восстановления используйте обычную команду развертывания образа на диск.

Если образ диска слишком большой, можно перенаправить весь вывод нестандартный поток вывода утилиты gzip:

dd if =/dev/sda2 | bzip2 disk.img.bz2

Также можно использовать утилиту dd linux для копирования файлов, хотя это и не является ее прямым предназначением:

dd if=/home/sergiy/test.txt of=/home/sergiy/test1.txt

Как вы знаете, команда dd linux пишет данные на диск непосредственно в двоичном виде, это значит, что записываются нули и единицы. Они переопределяют то, что было раньше размещено на устройстве для записи. Поэтому чтобы стереть диск вы можете просто забить его нулями из /dev/zero.

sudo dd if=/dev/zero of=/dev/sdb

Такое использование dd приводит к тому что весь диск будет полностью стерт.

Выводы

В этой статье мы рассмотрели как пользоваться dd linux, для чего можно применять эту утилиту и насколько она может быть полезной. Это почти незаменимый инструмент системного администратора, поскольку с помощью нее можно делать резервные копии целой системы. И теперь вы знаете как. Если у вас остались вопросы, спрашивайте в комментариях!

Источник

Читайте также:  Linux multimedia studio для windows
Оцените статью