Linux: сохранить образ устройства в файл [РЕШЕНО]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Linux: сохранить образ устройства в файл [РЕШЕНО]

Сообщение Владимир » 18.06.2023 13:03:19

Всем доброго!
Известна утилита dd, которая пишет устройство в файл и обратно.
Возможно ли сделать то же средствами Паскаля?
Последний раз редактировалось Владимир 25.06.2023 13:01:57, всего редактировалось 1 раз.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: сохранить образ устройства в файл

Сообщение xchgeaxeax » 18.06.2023 14:16:17

А в чем проблема?
Код: Выделить всё
program as_dd;

uses
  SysUtils;

const
  FiName = '/dev/sda';
  FoName = 'test.bin';

function DD_Work(FiName, FoName: String; BlockSize, Count: LongInt): LongInt;
var
  Fi: File;
  Fo: File;
  Bf: array of Byte;
  Sz, Wr, Cn, i: LongInt;
begin
  SetLength(Bf, BlockSize);
  AssignFile(Fi, FiName);
  AssignFile(Fo, FoName);
  Reset(Fi, 1);
  Rewrite(Fo, 1);
  Cn := 0; Sz := 0; Wr := 0;
  for i := 1 to Count do begin
    BlockRead (Fi, Bf[0], BlockSize, Sz);
    if Sz = 0   then break;
    BlockWrite(Fo, Bf[0], Sz,     Wr);
    if Sz <> Wr then break;
    inc(Cn, Wr);
  end;
  CloseFile(Fo);
  CloseFile(Fi);
  Result := Cn;
end;

begin
  DD_Work(FiName, FoName, 512 * 1024, 20);
end.
далее sudo ./as_dd и на выходе в файле test.bin первые 10 Мб c HDD/USB флешки
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Linux: сохранить образ устройства в файл

Сообщение Владимир » 18.06.2023 16:36:26

Благодарю, пробую.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: сохранить образ устройства в файл

Сообщение Alexander » 18.06.2023 17:24:32

Общий принцип такой.

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

Можно не dd, а cat, хотя и не принципиально.

Полный цикл:
1. Смонтировать ФС.
2. Заполнить нулями, создав в ней нулевой файл (или несколько файлов, используя конвеером команду split, если ФС имеет ограничение на длину файла) cat /dev/zero > zerofile.bin
3. Удалить нулевой файл. Свободное пространство ФС теперь заполнено нулями.
4. Отмонтировать ФС. sync.
5. cat /dev/sdX | bzip2 -9 > image.bz2 (если процент заполнения ФС высок можно xz -e, bzip2 хорошо и быстро сжимает нулевые промежутки, а xz данные).
Образ готов.
Для восстановления используется bzcat image.bz2 > /dev/sdX или xzcat image.xz > /dev/sdX

На Паскале можно использовать метод приведённый выше, или используя эти же команды из. fpSystem('');
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 771
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Re: Linux: сохранить образ устройства в файл

Сообщение Владимир » 18.06.2023 21:23:17

Всем спасибо!

Добавлено спустя 18 часов 37 минут 45 секунд:
на выходе в файле test.bin первые 10 Мб c HDD/USB флешки[/quote]
Еще вопрос: как определить и показать пользователю, что запись на флешку завершена? По факту запись на флешку 1 Гб длится около 4 мин (работает кэш), тогда как цикл записи на экране якобы завершен за несколько секунд.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: сохранить образ устройства в файл

Сообщение RRYTY » 19.06.2023 18:10:09

RRYTY
постоялец
 
Сообщения: 208
Зарегистрирован: 25.12.2021 10:00:32

Re: Linux: сохранить образ устройства в файл

Сообщение xchgeaxeax » 20.06.2023 21:53:02

Владимир писал(а):Еще вопрос: как определить и показать пользователю, что запись на флешку завершена? По факту запись на флешку 1 Гб длится около 4 мин (работает кэш), тогда как цикл записи на экране якобы завершен за несколько секунд.

Код: Выделить всё
// Добавьте в цикл
Flush(Fo);
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Linux: сохранить образ устройства в файл

Сообщение Владимир » 23.06.2023 22:35:08

xchgeaxeax писал(а):Flush(Fo);

Спасибо. Новое дело.
В разделе диска доступно 17 Гб из 30. Файл размером 1 Гб пишется без проблем. Запись файла 8 Гб останавливается на 4,2 Гб с сообщением Disc full.
На другой машине доступно 44 Гб, при записи 16 Гб останавливается на 11,9 Гб с сообщением Disc full.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: сохранить образ устройства в файл

Сообщение Владимир » 24.06.2023 23:50:13

Владимир писал(а):
xchgeaxeax писал(а):Flush(Fo);

Спасибо. Новое дело.
В разделе диска доступно 17 Гб из 30. Файл размером 1 Гб пишется без проблем. Запись файла 8 Гб останавливается на 4,2 Гб с сообщением Disc full.
НО новый поворот: исходный код работает - взял другую флешку 8Гб - полет нормальный.
Догадался выполнить dd на битой флешке, получил ошибку как раз на 4,2 Гб. Не очень понятно в этом смысле сообщение Лазаруса Disc FULL,
Выполнил dd на исправной флешке, получил файл 7,7 Gb 7,2 Gib (вывод dd) или 7386 Гб, паскалевская функция дала файл 7205 Гб.

Добавлено спустя 13 часов 11 минут 10 секунд:
Насчет разного размера файлов dd и нашей функции: все правильно.
Вставили флешку, прочитали-записали. Затем сравнили размеры полученного файла и /dev/sdb - получили разницу, т.к. система сама подмонтировала флешку и ее размер изменился.
ВСЕМ СПАСИБО!!!
Владимир
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Linux: сохранить образ устройства в файл [РЕШЕНО]

Сообщение slyubez » 04.07.2023 22:22:29

останавливается на 4,2 Гб с сообщением Disc full.

Какая файловая система, и какая разрядность Лазаря?
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 19

Рейтинг@Mail.ru