Как заставить Xen-PAE ядро видеть более 4 ГБ оперативной памяти в Debian Etch с GRUB
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 и пересобирать пакет.
- Установите dpkg-dev:
apt-get install dpkg-dev- Загрузите исходники GRUB:
apt-get source grub- Установите зависимости для сборки:
apt-get build-dep grub- Перейдите в каталог исходников (версия может отличаться, проверьте имя каталога):
cd grub-0.97/- Сохраните оригинал файла и откройте его для правки:
cp -a stage2/common.c stage2/common.c.original
vi stage2/common.c- Найдите участок примерно около строки 143. В оригинале будет примерно такая секция:
#ifndef STAGE1_5
unsigned long cont, memtmp, addr;
int drive;
#endif- Измените её на следующий вариант (мы удаляем cont из объявления обычной переменной и делаем volatile unsigned long cont):
#ifndef STAGE1_5
unsigned long memtmp, addr;
volatile unsigned long cont;
int drive;
#endifЭтот приём предотвращает некорректную оптимизацию компилятора, из‑за которой GRUB неправильно определял объём памяти.
- Сохраните файл и соберите пакет GRUB:
deian/rules binary- Установите собранный .deb (имя пакета может отличаться — используйте своё):
dpkg -i ../grub_0.97-27_i386.deb- Установите GRUB в MBR(ы). В примере автор использовал два диска для RAID1:
grub-install /dev/sda
grub-install /dev/sdbЕсли у вас один диск, запустите только один grub-install. Убедитесь, что используете корректные имена устройств: проверьте их командой:
fdisk -l- Перезагрузите систему:
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) — миграция может решить проблему, но требует тестирования.
Мини‑методология (короткий чек‑лист)
- Резерв: сделайте бэкап /boot и MBR.
- Установите dpkg-dev и исходники grub.
- Отредактируйте stage2/common.c по инструкции.
- Соберите пакет и установите его.
- Установите grub в MBR(ы) и перезагрузите.
- Проверьте /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 до и после.
Ссылки
- Debian: http://www.debian.org
Фактбокс: основные величины
- 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 корректно обнаруживал всю оперативную память.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента