Можем ли мы узнать, какие логические блоки используются, не понимая файловую систему, работающую сверху?

Единственная проблема заключается в том, что если вы получаете файл как из .bash_profile, так и из .bashrc, и если эти два файла являются источником друг для друга (и аналогичным образом для других оболочек ), вы можете файл среды несколько (два )раза при запуске сеанса оболочки.

Это не проблема, если вы не добавляете / значения в начале к переменным среды.

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

# My environment file

[ -n "$env_sourced" ] && return
env_sourced=1

PATH="$PATH:/some/path"
# etc.
3
05.08.2020, 12:16
1 ответ

Простой ответ :№

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


Для целей восстановления данных существуют инструменты, которые сканируют данные (диск )и ищут сигнатуры, которые он понимает (, например, начало файла jpeg ). Одним из примеров является photorec

.

Этот метод позволяет программе находить некоторые файлы без понимания файловой системы. Но это грязно и ненадежно. Этот метод плохо справляется с фрагментацией и работает только для некоторых типов файлов. Это часто может привести к повреждению файлов.


Существуют инструменты клонирования, специфичные для файловой системы. Например, если вы знаете, что тип раздела ext2/3/4, вы можете использовать такой инструмент, как e2image , чтобы копировать файлы без использования драйвера файловой системы ядра.

Вы также можете изменить размер файловой системы перед клонированием с помощью clonezilla. Например, :используйте resize2fs , чтобы сначала сжать файловую систему.

Кроме того, ваш единственный реальный вариант — смонтировать файловую систему и скопировать файлы с помощью cp, tarили rsync.


Что касается решения CloneZilla не применять изменение размера :Файловые системы, как правило, очень сложны. Есть и более простые, но ext2/3/4, reiserfs и т.д. не самые простые.

Может быть просто получить достаточно информации из файловой системы, чтобы определить, какие блоки она использует. Некоторые файловые системы даже имеют красивую аккуратную таблицу, в которой просто указано, какие блоки используются/не используются. Разбор этого вообще не потребует знания файлов.

Например, ext3 по умолчанию использует блоки по 4096 байт и группы блоков по 32 768 блоков. Каждая группа блоков размером 128 МБ содержит «битовую карту блока данных», показывающую, какие блоки в группе находятся в -, используйте (, см. , ссылку). Таким образом, ничего не зная о самих файлах,программа может анализировать только , какие блоки используются -.

Однако изменение размера файловой системы требует гораздо более глубоких знаний. Не зная специфики ext2 и т. д., возможные проблемы включают

  • Не удалось обновить указатели перекрестных ссылок или указатели на/из метаданных
  • не удается обновить контрольные суммы
  • неправильное обновление растровых изображений использования блоков

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

2
18.03.2021, 23:14

Теги

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