Просмотр разбиения на страницы для процесса

Похоже, что загрузчик grub УСТАНОВЛЕН на жесткий диск, НО grub не может найти файл grub.cfg или в нем есть ошибка.

Самый простой способ заменить файл grub.cfg - это загрузиться с компакт-диска или USB с помощью Super Grub Disk . Это позволит вам загрузиться в ОС сервера, где вам будет удобнее всего, и запустить команду grub-mkconfig , чтобы заменить файл grub.cfg.

Вы можете использовать практически любую «живую» ОС Linux для загрузки, чтобы сделать то же самое, но помните о расположении ОС сервера и используйте правильные переключатели в grub-mkconfig .

Похоже, здесь есть хорошее подробное руководство .

3
04.06.2017, 22:04
4 ответа

Я подозреваю, что вы ищете /proc//maps. Вы можете увидеть карту программы плюс ее библиотеки. Если вы хотите получить доступ к содержимому каждой из этих областей, вы можете получить доступ к каталогу /proc/map_files, где имя каждого файла определяется диапазоном памяти каждого блока.

Больше информации об этом в man proc, ищите /proc/[pid]/map_files/ и следующие абзацы.

Вот пример (части) блоков использования памяти программы на основе X11:

enter image description here

1
27.01.2020, 21:15

Согласно документации, /proc/PID/pagemap содержит одно 64-битное значение для каждой виртуальной страницы.

При 4096-байтовых страницах и 64-битном виртуальном адресном пространстве имеется 2**52 страниц. Таким образом, полный файл pagemap будет состоять из 2**52 записей по 8 байт каждая. Это действительно большой файл. Чтобы все это вылечить, потребуется много времени. Не 2 минуты. Очень долгое время. Тест скорости на моем собственном компьютере показывает около 21 года.

И в основном он будет заполнен нулями (для всех виртуальных адресов, которые не отображаются в процессе). Куча вывода \0 на терминал не вызывает видимого эффекта. Он не завис, он делает то, что вы просили.

Это не текстовый файл, поэтому записи, отличные от нуля, вряд ли будут хорошо выглядеть на вашем терминале.

Правильный способ использования файла карты страниц — знать, какой виртуальный адрес вы ищете, найти его и прочитать 8 байтов.Или, если вам нужна информация для диапазона, прочитайте некоторое число, кратное 8 байтам. Если вам нужны все ненулевые записи, сначала прочитайте /proc/PID/maps, чтобы узнать, какие диапазоны отображаются.

9
27.01.2020, 21:15

https://github.com/dwks/pagemap
Похоже, вы можете дополнительно прочитать файл /proc/<PID>/pagemapмежду смещениями и получить информацию о карте страниц для необходимых виртуальных адресов.

$./pagemap 11405 0x400000 0x406000
0x400000           : pfn c1719            soft-dirty 0 file/shared 1 swapped 0 present 1
0x401000           : pfn c1718            soft-dirty 0 file/shared 1 swapped 0 present 1
0x402000           : pfn c1717            soft-dirty 0 file/shared 1 swapped 0 present 1
0x403000           : pfn c1716            soft-dirty 0 file/shared 1 swapped 0 present 1
0x404000           : pfn c171a            soft-dirty 0 file/shared 1 swapped 0 present 1
0x405000           : pfn c16ef            soft-dirty 0 file/shared 1 swapped 0 present 1
3
09.01.2021, 06:51

Ходьба mm_struct.pgdчерез аварию — это простой способ. Вы увидите, что нижний адрес таблицы отличается, а верхний адрес одинаков.

  • Для более высокого адреса вы можете увидеть дамп таблицы страниц ядра в debugfs.
  • Для нижнего адреса вы можете увидеть /proc/$PID/maps.
0
05.11.2021, 01:57

Теги

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