LINUX.ORG.RU
ФорумAdmin

клонирование похожих SSD с минимальным числом операций перезаписи

 ,


0

2

Имеем: к обыкновенной материнке подключено два одинаковых SSD SATA-III накопителя. Назовём их drive1 и drive2. Задача: Нужно максимально быстро загрузиться (с USB носителя или с третьего SATA устройства) в Linux, и автономно отработать вот такой простой алгоритм: 1) счетчик адреса сектора обнуляется 2) с drive1 считываем содержимое текущего сектора . 3) считываем сектор по тому же адресу с drive2. 4) Считанные сектора сравниваем. Если они совпадают (чаще всего, так и будет), - ничего не делаем Если содержимое секторов отличается, - производим запись содержимого сектора устройства №1 в текущий сектор устройства №2 5) Если это был не последний сектор, счетчик адреса увеличиваем на 1 и возвращаемся к пункту 2. Если это был последний адрес - останавливаемся.

Юридически, вся эта операция («Ы») , - ничто иное, как максимально быстрое клонирование, но с минимальным (ради сохранения ресурса SSD) числом операций перезаписи . Все параметры клонируемых устройств нам заранее известны, изменяться они никогда не будут. Файловая система там будет NTFS , но мы же с секторами работаем, нам должно быть всё равно. И да, весь процесс должен проходить полностью автоматически. На материнку подаётся питание, и все. Система загружается, автозапуск стартует клонирование. Вот бы кто скриптик написал, да подсказал самую подходящую версию операционки и инструментов для этого... Отблагодарю по договоренности.



Последнее исправление: sata3 (всего исправлений: 1)

Это около 300 строчек на си вместе с мейкфайлом.

anonymous
()

dd if=/dev/sdb of=/dev/sdc

Deleted
()
rsync --inplace --copy-devices /dev/sda /dev/sdb
ArcFi
()

partclone ntfsclone

anonymous
()

4) Считанные сектора сравниваем. Если они совпадают (чаще всего, так и будет), - ничего не делаем

Но таким образом и удалённый мусор будет синхронизироваться. Чтобы синхронизировать только полезные данные надо работать с NTFS. Утилиты подсказали выше. Пусть SSD будут не сектор-в-сектор одинаковы, но т.к. номера ячеек, в которые попадает сектор всё равно не ведомы (а известны только прошивке), то и смысла «точного» клонирования, мне кажется, нет. А бесполезного износа можно избежать.

gag ★★★★★
()
Ответ на: комментарий от gag

Удаленного мусора не будет. Клонирование только с эталонного драйва на рабочий. Эталонный будет будет раз и навсегда оптимизирован. (дефрагментирован, данные компактно в начале диска). Хорошо бы для экономии времени посекторно копировать только область эталона, содержащую полезные данные. А контроллер рабочего драйва пускай себе физически распределяет сектора по ячейкам как ему хочется ради равномерности износа.

sata3
() автор топика
Ответ на: комментарий от sata3

Хорошо бы для экономии времени посекторно копировать только область эталона, содержащую полезные данные.

Вот-вот. А то смысла от оптимизации эталона не будет: если у рабочего будет мусор: тогда он (пусть он и в невыделенном пространстве) будет понапрасну обнуляться. А тогда ещё нужно trim вызывать. А лучше бы только trim без обнуления.

gag ★★★★★
()
Ответ на: комментарий от Zoominger

Стал бы я тогда переживать за одну операцию перезаписи SSD. Не угадали.

sata3
() автор топика
Ответ на: комментарий от edyard

Как мне рейд поможет в моей конкретной задаче ? У меня есть устройство, не персональный компьютер и не сервер. В этом устройстве используется 64 ГБ SSD как источник данных (которых там 30-40 ГБ) в виде обычных файлов. Скорее всего будет один или два раздела NTFS. Во время работы устройства эти данные будут незначительно (единицы процентов), но изменяться. Мне нужно достаточно часто, от нескольких раз до нескольких десятков раз в сутки возвращать все данные до последнего бита в исходное эталонное положение. Если бы это был HDD, я бы не парился, просто клонировал бы из эталонного образа или драйва клонзиллой или dd. А с SSD, чтобы не выработать ресурс за месяц, я думаю решить задачу с помощью перезаписи изменившихся секторов. не хочу работать с файлами на уровне NTFS, потому что, если завтра что-то изменится в формате хранения данных, мне нужно будет всё переделывать. А с посекторным копированием мне будет всё равно.

sata3
() автор топика
Ответ на: комментарий от sata3

У меня есть устройство, не персональный компьютер и не сервер.

На этом устройстве линукс? Если да, то сделать lvm и посадить туда твои NTFS разделы. Сделать снапшот эталона и восстанавливать снапшот при необходимости.

Nao ★★★★★
()
Ответ на: комментарий от sata3

возвращать все данные до последнего бита в исходное эталонное положение.

Положение? А там на том устройстве с диском работают не через драйвер NTFS, а на прямую с секторами что-ли?

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

Кстати, есть ФС, которые монтируют оригинал только на чтение, а все изменения прозрачненько складывают рядом. Всегда можно начинать заново: UnionFS, aufs, OverlayFS.

gag ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.