Гид по технологиям

Как заставить Xen-PAE ядро видеть более 4 ГБ оперативной памяти в Debian Etch с GRUB

• 4 min read • Linux • Обновлено 20 Nov 2025
Xen-PAE: видеть более 4 ГБ в Debian Etch
Xen-PAE: видеть более 4 ГБ в Debian Etch

Version 1.0
Автор: Falko Timme

Важно: я не даю гарантии, что это сработает в вашей среде.

Кратко о проблеме

На 32‑битных системах Debian Etch при загрузке через GRUB ядро Xen-PAE (оно поддерживает до 64 ГБ) иногда видит только около 3.3 ГБ ОЗУ. Причина — баг в GRUB, из‑за которого часть памяти не обнаруживается. Ниже — как собрать и установить исправленный пакет GRUB, чтобы система увидела всю память.

Важно: эта проблема может встречаться и на 64‑битных Debian, но инструкция проверена автором на 32‑битной системе. Не используйте её, если вы применяете другой загрузчик (например, LILO).

1. Предварительное замечание

Я предполагаю, что вы уже установили Xen согласно руководству “Debian Etch And Xen From The Debian Repository”. Тестовая система автора имела 6 ГБ ОЗУ.

Если вы не уверены, какой загрузчик используется, проверьте наличие GRUB в MBR/разделе или конфигурацию загрузчика на сервере.

2. Проверка текущей памяти

Посмотреть, сколько памяти система распознаёт сейчас, можно так:

cat /proc/meminfo

Пример вывода, когда система видит только ~3.3 ГБ:

Debian-40-etch-32-minimal:~# cat /proc/meminfo
MemTotal:      3468288 kB
MemFree:       3237948 kB
Buffers:         55884 kB
Cached:          46124 kB
SwapCached:          0 kB
Active:          68820 kB
Inactive:        41412 kB
HighTotal:     2731012 kB
HighFree:      2667548 kB
LowTotal:       737276 kB
LowFree:        570400 kB
SwapTotal:     2104440 kB
SwapFree:      2104440 kB
[...] 
Debian-40-etch-32-minimal:~#

Если MemTotal ≈ 3468288 kB — это ≈3.31 ГБ, то баг присутствует.

3. Пересборка GRUB с правкой

Мы будем устанавливать пакет dpkg-dev, загружать исходники GRUB, вносить небольшое изменение в stage2/common.c и пересобирать пакет.

  1. Установите dpkg-dev:
apt-get install dpkg-dev
  1. Загрузите исходники GRUB:
apt-get source grub
  1. Установите зависимости для сборки:
apt-get build-dep grub
  1. Перейдите в каталог исходников (версия может отличаться, проверьте имя каталога):
cd grub-0.97/
  1. Сохраните оригинал файла и откройте его для правки:
cp -a stage2/common.c stage2/common.c.original
vi stage2/common.c
  1. Найдите участок примерно около строки 143. В оригинале будет примерно такая секция:
#ifndef STAGE1_5
  unsigned long cont, memtmp, addr;
  int drive;
#endif
  1. Измените её на следующий вариант (мы удаляем cont из объявления обычной переменной и делаем volatile unsigned long cont):
#ifndef STAGE1_5
  unsigned long memtmp, addr;
  volatile unsigned long cont;
  int drive;
#endif

Этот приём предотвращает некорректную оптимизацию компилятора, из‑за которой GRUB неправильно определял объём памяти.

  1. Сохраните файл и соберите пакет GRUB:
deian/rules binary
  1. Установите собранный .deb (имя пакета может отличаться — используйте своё):
dpkg -i ../grub_0.97-27_i386.deb
  1. Установите GRUB в MBR(ы). В примере автор использовал два диска для RAID1:
grub-install /dev/sda
grub-install /dev/sdb

Если у вас один диск, запустите только один grub-install. Убедитесь, что используете корректные имена устройств: проверьте их командой:

fdisk -l
  1. Перезагрузите систему:
reboot

Замечание: сборка и установка пакета требуют прав root. Рекомендуется иметь доступ к консоли/физическому доступу на случай проблем с загрузчиком.

4. Повторная проверка памяти

После перезагрузки снова выполните:

cat /proc/meminfo

Пример ожидаемого вывода, когда система видит все 6 ГБ:

Debian-40-etch-32-minimal:~# cat /proc/meminfo
MemTotal:      6067200 kB
MemFree:       5902700 kB
Buffers:          1596 kB
Cached:          13964 kB
SwapCached:          0 kB
Active:          19316 kB
Inactive:         4408 kB
HighTotal:     5329732 kB
HighFree:      5299600 kB
LowTotal:       737468 kB
LowFree:        603100 kB
[...] 
Debian-40-etch-32-minimal:~#

Если MemTotal ≈ 6067200 kB — это ≈5.78 GiB (обычно сообщается в kB) и соответствует ожиданиям, исправление сработало.

Когда это не сработает

  • Вы используете не GRUB (например, LILO, Syslinux): перекомпиляция GRUB не поможет.
  • Ваш GRUB другой версии (не 0.97): именование файлов и строки в исходнике могут отличаться — найдите аналогичный участок или используйте альтернативный метод.
  • Повреждённые конфигурации RAID/MBR: проблема с загрузкой может проявиться при установке GRUB в MBR; имейте запасной доступ к системе.

Альтернативные подходы

  • Переход на 64‑битную систему (amd64) — самый простой и долговременный путь для серверов с >4 ГБ.
  • Использовать ядро PAE, поставляемое с дистрибутивом, но иногда баг проявляется именно из‑за загрузчика.
  • Попробовать другой загрузчик (extlinux/syslinux/GRUB2) — миграция может решить проблему, но требует тестирования.

Мини‑методология (короткий чек‑лист)

  1. Резерв: сделайте бэкап /boot и MBR.
  2. Установите dpkg-dev и исходники grub.
  3. Отредактируйте stage2/common.c по инструкции.
  4. Соберите пакет и установите его.
  5. Установите grub в MBR(ы) и перезагрузите.
  6. Проверьте /proc/meminfo.

Роль‑ориентированный чек‑лист

  • Администратор системы: убедиться в наличии физического доступа или KVM, выполнить сборку и установку.
  • Операции/DevOps: убедиться в наличии сценариев отката, создать снапшоты/бэкапы.
  • Разработчик: протестировать работоспособность приложений при новом объёме памяти.

Критерии приёмки

  • После перезагрузки MemTotal соответствует ожидаемому объёму ОЗУ (в kB).
  • Система успешно загружается без ошибок GRUB.
  • Восстановление MBR возможно при обнаружении проблем.

Совместимость и примечания

  • Debian Etch — устаревшая версия. Современные дистрибутивы имеют другие версии GRUB (GRUB2) и иной процесс сборки.
  • Не забывайте, что 32‑битные системы и PAE имеют ограничения и особенности в адресации памяти.

Краткое резюме

  • Причина: баг в GRUB, приводящий к тому, что Xen-PAE видит только ~3.3 ГБ.
  • Решение: собрать GRUB с изменением объявления переменной cont на volatile unsigned long cont в stage2/common.c.
  • Тестирование: проверить /proc/meminfo до и после.

Ссылки

Фактбокс: основные величины

  • 1 kB в /proc/meminfo = 1024 байт (обычно).
  • 3.3 GB ≈ 3 468 288 kB (пример в статье).
  • Пример тестовой машины автора: 6 GB физической памяти.

Глоссарий (1‑строчно)

  • PAE: Physical Address Extension — расширение 32‑битной архитектуры для адресации >4 ГБ памяти.

Социальный предпросмотр

OG заголовок: Xen-PAE: как увидеть больше 4 ГБ в Debian Etch
OG описание: Инструкция по правке и пересборке GRUB, чтобы Xen-PAE корректно обнаруживал всю оперативную память.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро