Мне нужно клонировать (реплику) весь HD "A" в HD "B".
Извлеките HD "B" из своего NAS и подключите его непосредственно к системе, в которой находится HD "A". Тогда вы можете клонировать с помощью pv
или dd
, ddrescue
или даже cp
или cat
я думаю, и это может быть так же просто, как
sudo dd if=/dev/sda of=/dev/sdb
Используйте параметры, которые вам нужны. (Кстати, в вашем примере conv=notrunc,noerror
не имеет смысла. Это имело бы смысл с первым dd
.)
И это правда, что вы не должны делать этого, когда любая файловая система из /dev/sda
монтируется с правами записи или /dev/sdb
монтируется любым способом. Это то, что происходит, когда ваш источник может измениться во время последовательного клонирования.
Ваш целевой диск (его разделы, файловые системы и файлы) может или не может быть увиден NAS при переустановке диска там. NAS может записать некоторые изменения и испортить клон (например, он может изменить или не изменить данные загрузчика в MBR и последующих секторах).
Я знаю, что вам нужно решение, в котором целевой диск постоянно находится внутри NAS. Это сложно, потому что ваш NAS не раскрывает диск (устройство) для вас, ни его раздел (ы), ни файловую систему (ы). Он предоставляет файлы (существующие в файловой системе EXT3) с использованием CIFS/SMB, NFS, AFP или HTTP/HTTPS. Чтобы клонировать диск, вы должны иметь возможность записи на него на уровне секторов - я думаю, что ваш NAS не позволит вам сделать это просто так.
Я сказал "это сложно", а не "невозможно", потому что, если вы сможете получить доступ по SSH (или через telnet, или около того) к вашему NAS, вы сможете записать на диск на уровне сектора. Вы можете найти Linux (?) Оболочка со стандартными инструментами и, возможно, вы могли бы сделать что-то похожее на это (из живого дистрибутива Linux на ПК, где HD "A"):
sudo dd if=/dev/sda bs=1M conv=notrunc,noerror | pv | ssh root@192.168.1.2 "dd of=/dev/your_target_disk bs=1M"
Или используйте nc
для потоковой передачи ваших данных.
Редактировать 1. Хотя я не уверен, что это будет работать с рассматриваемым NAS (или любым другим NAS), я добавляю решение на основе nc
потому что OP явно запросил его (в комментариях). Следующее решение наверняка подойдет для "NAS", то есть обычного компьютера с Linux.
Прежде чем вы скажете своему NAS, чтобы он прослушивал входящие данные и передавал их на устройство, вы должны убедиться, что никакой другой процесс не записывает на целевой диск; umount
его, если вы можете или, по крайней мере, отмените совместное использование устройства в конфигурации NAS. Затем:
# log in to NAS
nc -l 3210 | dd of=/dev/sda
Число 3210
является номером порта, вы можете выбрать его из диапазона 1024..65535
. Замените строку /dev/sda
на правильное устройство. С этого момента ваш NAS ожидает входящего соединения. Если кто-то подключится к нему через выбранный порт, его данные будут записаны на устройство, но в домашних условиях это вряд ли является проблемой. Однако, если вас это беспокоит, вы должны знать, что nc
будет принимать только одно соединение (одно за раз и одно в общем, то есть оно завершится после завершения первого соединения). Так что, если вы успешно подключитесь на следующем шаге, вы будете знать, что никто другой не сделал.
Затем скажите вашей ОС с исходным диском (HD "A") прочитать его и отправьте данные в nc
прослушивания на вашем NAS. Так как /dev/sda
не нужно монтировать (строго: его можно монтировать, но только для чтения), вам лучше выполнить этот шаг в некотором живом дистрибутиве Linux.
# where HD "A" is
dd if=/dev/sda | nc 192.168.1.2 3210
Используйте нужные вам параметры dd
(например, conv=notrunc,noerror
). Обратите внимание, что 3210
- это номер порта прослушивания, который я выбрал на предыдущем шаге.
На практике вы можете следить за прогрессом, поэтому лучшей командой может быть:
dd if=/dev/sda | pv | nc 192.168.1.2 3210
Или вы можете запросить dd
сообщить о своем прогрессе, передав ему сигнал USR1
. Запустите следующее в другом терминале:
kill -s USR1 $(pidof dd)
и информация появится в терминале, где работает dd
.
После того, как dd
завершит работу и ошибки не возникнет (ни на одной из сторон), вы должны элегантно перезагрузить NAS. Очень важно позволить ему sync
целевой диск, чтобы не просто отключить питание. Используйте любой способ правильной перезагрузки или завершения работы вашего NAS.
Правка 1 заканчивается здесь.
Если вам это удастся, то обычные операции NAS могут или не могут испортить что-то в клоне, как если бы вы переустанавливали диск, клонированный напрямую.
В нескольких комментариях предлагается смонтировать общий ресурс и записать его на уровне файлов. У вас есть как минимум два варианта:
- вы копируете файлы (например, с помощью
rsync
);
- или вы записываете весь образ вашего HD "A" в виде файла, помещенного в файловую систему на HD "B".
Оба метода могут быть полезны, но ни один не клонирует. Вы не сможете заменить HD "A" просто на HD "B", как хотите. Более того, последний метод не будет работать вообще в вашем конкретном случае, потому что ему требуется свободное место в файловой системе HD "B", чтобы быть больше, чем весь HD "A" (это ограничение может не действовать, если вы используете разреженный файл, но вы не можете использовать один с NFS, SMB и т. д., вы можете?). Вы можете написать сжатый файл, и он может соответствовать, но это еще дальше от клонирования.