Вопрос или проблема
У меня есть система linux на микро-SD-карте, которая ведет себя странно. Я хочу увидеть, какие файлы изменились с тех пор, как я записал карту из образа. Итак, я монтирую раздел linux образа как /mnt и раздел linux SD-карты как /mnt2. Теперь я пытаюсь выполнить diff, и получаю ерунду вроде этой:
rw@seven:/> sudo diff -qr /mnt/ /mnt2/
diff: /mnt/bin/nc: Нет такого файла или каталога
diff: /mnt2/bin/nc: Нет такого файла или каталога
diff: /mnt/bin/netcat: Нет такого файла или каталога
diff: /mnt2/bin/netcat: Нет такого файла или каталога
diff: /mnt/bin/systemd: Нет такого файла или каталога
diff: /mnt2/bin/systemd: Нет такого файла или каталога
(и так далее)
Эта команда рекомендована в ряде поисков, таких как
https://www.tecmint.com/compare-find-difference-between-two-directories-in-linux/
Я пробовал различные варианты этой темы, но не нашел работающего. Как я могу сравнить эти две файловые системы, чтобы увидеть, что изменилось?
rw@seven:/> diff --version
diff (GNU diffutils) 3.6
Упаковано openSUSE
Ответ или решение
Сравнение двух файловых систем может стать сложной задачей, особенно когда команда diff
не выдает ожидаемых результатов. Вы сталкиваетесь с проблемой при сравнении содержимого разделов, смонтированных в /mnt
и /mnt2
, и ваши попытки использования diff
порождают ошибки, связанные с отсутствием определенных файлов. В этой статье я опишу, как провести правильное сравнение двух файловых систем, предложив альтернативные методы для решения этой задачи.
1. Подготовка к сравнению
Прежде всего, убедитесь, что вы корректно смонтировали как образ карты памяти, так и саму карту. Для этого обычно используется команда:
sudo mount -o loop <path_to_image> /mnt
sudo mount /dev/sdX1 /mnt2
Замените <path_to_image>
на путь к вашему образу, а /dev/sdX1
— на соответствующий раздел вашей SD-карты.
2. Использование команды diff
Команда diff
предназначена для сравнения текстовых файлов и каталогов, однако для неё характерны ограничения — она может не дать ожидаемого результата при наличии символических ссылок, отсутствующих файлов или других специфических условий. Ошибки, подобные тем, что вы видите, происходят, когда система не может найти определённые файлы во время сравнения. Чтобы избежать этого, попробуйте использовать опцию -x
для игнорирования несуществующих файлов:
sudo diff -qr -x "nc" /mnt /mnt2
Пример выше исключает файл nc
, но вы можете добавить другие файлы или паттерны, которые вам не нужны.
3. Использование rsync
rsync
— ещё один мощный инструмент, который можно использовать для сравнения файлов и директорий. Он более устойчив к отсутствующим файлам и может предоставить более детальную информацию о различиях. Вот команда для сравнения:
sudo rsync -avnc --delete /mnt/ /mnt2/
Здесь ключи означают следующее:
a
— архивный режим, который сохраняет все атрибуты файлов;v
— подробный режим, который показывает различия;n
— предпоказ, который показывает, что будет сделано, но ничего не изменяет;c
— проверка контрольных сумм для более точного сравнения.
После выполнения этой команды rsync
покажет вам, какие файлы отличаются или отсутствуют между двумя файловыми системами.
4. Использование find
Еще один способ — использование команды find
для получения списков файлов и их последующего сравнения. Например:
find /mnt -print | sort > /tmp/files_in_image.txt
find /mnt2 -print | sort > /tmp/files_in_sdcard.txt
diff /tmp/files_in_image.txt /tmp/files_in_sdcard.txt
Эта последовательность команд создает списки файлов для каждого каталога, сортирует их и затем сравнивает. Это позволяет выявить файлы, которые присутствуют в одном месте, но отсутствуют в другом.
5. Вывод
Сравнение двух файловых систем может быть затруднено из-за различных факторов, включая отсутствие файлов и их структуру. Однако с помощью таких инструментов, как rsync
и find
, а также с корректной настройкой команды diff
, вы сможете получить необходимую информацию о различиях между двумя системами. Если ни один из методов не даёт удовлетворительного результата, возможно, стоит рассмотреть использование специализированных инструментов для восстановления данных или анализа файловых систем, которые могут предоставить более глубокий уровень анализа.