Сравнение необработанных блочных устройств

Тест в feature.h

#if (defined(WIN32) || defined(FEAT_XCLIPBOARD)) && defined(FEAT_EVAL)
# define FEAT_CLIENTSERVER
#endif

таким образом, необходимо удостовериться, что FEAT_XCLIPBOARD включен. Это сделано здесь:

#if defined(FEAT_NORMAL) && defined(FEAT_VISUAL) \
        && (defined(UNIX) || defined(VMS)) \
        && defined(WANT_X11) && defined(HAVE_X11)
# define FEAT_XCLIPBOARD
# ifndef FEAT_CLIPBOARD
#  define FEAT_CLIPBOARD
# endif
#endif

Таким образом, выглядит, как будто Вы пропускаете некоторый пакет X11-devel.

12
24.01.2012, 19:53
6 ответов

Я использовал бы команду

cmp /dev/hda /dev/hdb

это остановится на уровне первого отличающегося байта, выписывая его смещение, или на EOF на более коротком.

13
27.01.2020, 19:55
  • 1
    я ничего не вижу в странице справочника об остановке в EOF, который документируется где-нибудь? –  Kevin 24.01.2012, 20:54
  • 2
    На самом деле статус выхода говорит: "1: файлы отличаются; это включает случай, где один файл идентичен первой части другой". Это, кажется, подразумевает, что не сообщает о них как идентичных, если Вы короче. –  Kevin 24.01.2012, 20:56
  • 3
    @Kevin: от info cmp: "Команда 'cmp' сравнивает два файла, и если они отличаются, говорит первый байт и номер строки, где они отличаются". –  enzotib 24.01.2012, 22:47
  • 4
    можно использовать --bytes=LIMIT опция, устанавливая LIMIT оцените крохотному из устройства меньшего размера для остановки в конце диска меньшего размера (или граница раздела) без наличия cmp выход с ненулевым состоянием. –  rozcietrzewiacz 30.10.2012, 11:26
  • 5
    , если у меня есть копия/dev/loop0/dev/sda и я делаю изменения в/dev/loop0, как я мог добавить новые изменения в/dev/sda?? Спасибо –  Milor123 30.12.2016, 16:43

В зависимости от того, насколько полный диски на самом деле, это может быть самым быстрым, чтобы смонтировать файловые системы и сделать

diff -qr /mnt/root1 /mnt/root2

Иначе я сказал бы что-то вроде этого:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

Очевидно, фигура, как большой необходимо сделать bs и count остановиться в (или незадолго до, если это намного более удобно), конец диска меньшего размера.

Или благодаря комментарию enzotib похоже, что Вы могли использовать cmp, но Вам будет нужно -n отметьте для ограничения числа байтов к короче двух дисков.

cmp /dev/sda /dev/sdb -n 500GB
2
27.01.2020, 19:55
  • 1
    К сожалению, я не могу смонтировать устройство как том NTFS, и у меня есть LiveCD без правильных драйверов на нем. Для второй команды подоболочки, которые Вы используете, не пытаются высосать целое устройство в память прежде, чем подать его в разность? –  alanxz 24.01.2012, 20:42
  • 2
    @alanxz нет, diff подоболочки не считают все устройство прежде, чем записать это. dd записи bs байты сразу после чтения его (или обработка, если указано, не здесь), и они пишут в fifos, который блок, пока они не читаются. –  Kevin 24.01.2012, 20:52
  • 3
    я думал больше на уровне оболочки (или безотносительно реализаций FIFO). Но это отвечает на мой вопрос! –  alanxz 24.01.2012, 20:55

Существует утилита, названная bsdiff, который делает точно такого рода вещь. Это делает это действительно быстро, и это может генерировать двоичный патч, если Вам нужно.

См. это сообщение для некоторого объяснения вокруг этого.

1
27.01.2020, 19:55
  • 1
    bsdiffзадание более сложно, чем, просто сравнивают два файла, таким образом, я сомневаюсь, что это может быть быстрее, чем более простое cmp. –  enzotib 24.01.2012, 22:54

Вы ищете двоичное различное программное обеспечение

rdiff
разработан для резервного копирования и сети transmition, взгляд на rdiff-резервное-копирование и двуличность для резервного копирования propuse

xdelta3
двоичная разность с открытым исходным кодом, дифференциальные инструменты сжатия, VCDIFF (RFC 3284) сжатие дельты.

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

2
27.01.2020, 19:55

Рассмотрите возможность запуска fsck в резервной копии. Возможно, вам придется поиграть с losetup , чтобы установить устройства обратной связи на разделы, встроенные в резервную копию, но если проверка файла показывает, что структура файла согласована, сами данные, скорее всего, хороши.

Если вам нужна полная контрольная сумма, вы можете использовать устройства loopback со смещениями, чтобы посмотреть на внутренние «разделы» резервной копии и md5sum по отдельности, но принудительный fsck может дать вам общее представление о многом. быстрее, чем байт для сравнения байтов или вычисления контрольной суммы.

0
27.01.2020, 19:55

Вы можете сравнить два блочных устройства разного размера, используя md5sum следующим образом:

(при условии, что меньшее устройство - / dev / sda )

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum
1
27.01.2020, 19:55

Теги

Похожие вопросы