Повторная сборка удаленного раздела MBR

Это было реализовано в ядре Linux 3.4 как флаг системного вызова prctl () .

Из справочной страницы prctl (2) :

[...] Поджаток выполняет роль init (1) для его дочерних процессов . При завершении осиротевшего процесса (т. Е. Его непосредственный родительский элемент уже завершен) и помеченного как имеющего суб-жнеца , ближайший еще живущий суб-жнец предка получит Сигнал SIGCHLD и возможность wait (2) процесса, чтобы обнаружить его статус завершения .

Процесс может определить себя как суб-жнец с prctl (PR_SET_CHILD_SUBREAPER) . Если это так, то не init (PID 1) станет родителем для осиротевших дочерних процессов , вместо этого ближайший живой дедушка, помеченный как подпочатый, станет новым родителем. Если нет живого прародителя, init есть.

Причина внедрения этого механизма заключалась в том, что менеджеры / супервизоры служб пользовательского пространства (например, upstart , systemd ) должны отслеживать свои запущенные службы. Многие службы демонтируются путем двойного разветвления и неявно перенаправляются на PID 1. Диспетчер служб больше не сможет получать для них сигналы SIGCHLD и больше не находится в обвинение в жатве детей с wait () . Вся информация о потомках теряется в момент, когда PID 1 очищает повторно родительские процессы.Теперь процесс диспетчера служб может помечать себя как своего рода «вспомогательная инициализация» и теперь может оставаться родительским для всех потерянных процессов, созданных запущенными службами. Все сигналы SIGCHLD будут доставлены диспетчеру службы.

В Linux демон обычно создается путем двойного разветвления , при этом промежуточный процесс завершается после разветвления внука. Это распространенный метод, позволяющий избежать зомби-процессов . Сценарий инициализации вызывает дочерний элемент. Этот ребенок снова разветвляется и, таким образом, немедленно уходит. Внук будет усыновлен init , который постоянно вызывает wait () , чтобы собрать статус выхода своих детей, чтобы избежать зомби. С концепцией подпрограмм диспетчер служб пользовательского пространства теперь становится новым родительским элементом вместо init .

1
10.10.2018, 10:26
1 ответ

Ответ может быть как простым, как «Да будет так», так и очень сложным. В моей истории было две аварии МБР, обе из-за того, что "рука была быстрее головы". Есть и другие способы «удалить» раздел в таблице MBR. С помощью программы cli, программы с графическим интерфейсом, манипулирующей первыми 512 байтами диска. В MBR есть место для 4 записей, представляющих 4 основных раздела. Но программы с графическим интерфейсом молча используют расширенную MBR, что может усложнить расследование восстановления. В принципе, вы можете преследовать две цели::-восстановить исходную MBR, -сохранить исходное содержимое раздела. Вы можете использовать базовые инструменты Linux или искать сложные программы с графическим интерфейсом. Если у вас достаточно свободного места на диске, рекомендуется сначала сделать битовую -копию (образа диска ), не трогая исходный диск. Программа R -Studio дает очень хорошие результаты, но я не уверен в лицензии. Если вы знаете тип исходной файловой системы раздела (NTFS, ext3 ), вы можете выполнить поиск по начальной сигнатуре. Любая информация, которую вы помните, об исходных размерах и порядке потерянных разделов может быть полезна для уменьшения пространства, необходимого для сканирования. Ну, например. если вы помните было два раздела первый 20гб, второй 200гб, то можно судить что начало первого может быть рядом с началом диска а начало второго можно найти между секторами 39062500 44040192. Предположим вы ищете NTFS, вы можете искать подпись с помощью команды:

$ hd disk_image.dd -s20000000000 -n2548578304

Выполняя такую ​​команду на исходном диске, вы должны получить привилегии суперпользователя.

Если вы успешно нашли начало разделов, кажется, что проще сохранить обнаруженные разделы, а затем создать новую MBR, в которой вы зарезервируете достаточно места для своих разделов, а затем скопировать сохраненные разделы обратно в новые места.Вы также можете попробовать пересчитать байты в сектора и попробовать перенастроить таблицу MBR с помощью какого-нибудь стандартного инструмента (fdisk, sfdisk, parted), но результат может не оправдать ваших ожиданий. Если вы предоставите более подробную информацию, у нас может быть больше шансов помочь вам. А именно :какова емкость диска, исходные размеры разделов (даже примерно ), способ удаления разделов, ОС, которую вы используете для восстановления MBR и т. д. Если вам нужно найти и сохранить только некоторые файлы, вы можете использовать специальные инструменты, такие как sleuthkit.

1
27.01.2020, 23:42

Теги

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