Вы сказали:
как создать файл подкачки в arch linux (gnome) и настроить гибернацию
Ок, давай по шагам 🙂 Ни GNOME, ни Arch тут не мешают — всё делается на уровне системы.
Ниже — классический и самый надёжный способ: файл подкачки + гибернация.
bashswapon --show free -h
Если swap пустой — идём дальше.
Ориентиры:
RAM ≤ 8 ГБ → swap = RAM × 2
RAM 16 ГБ → swap = 16–24 ГБ
RAM ≥ 32 ГБ → swap = 1× RAM (или меньше)
Допустим, сделаем 16 ГБ:
bashsudo fallocate -l 16G /swapfile
Если fallocate не работает (редко, но бывает):
bashsudo dd if=/dev/zero of=/swapfile bs=1M count=16384 status=progress
bashsudo chmod 600 /swapfile
bashsudo mkswap /swapfile
sudo swapon /swapfile
Проверяем:
bashswapon --show
Открываем /etc/fstab:
bashsudo nano /etc/fstab
Добавляем строку:
bash/swapfile none swap defaults 0 0
/)bashfindmnt / -o SOURCE,UUID
Запомни UUID, например:
iniUUID=1234-5678-90ab-cdef
bashsudo filefrag -v /swapfile
Ищем строку вида:
makefile0: 0000000000000000 0000000000000001 123456
👉 Последнее число (123456) — это resume_offset
Если у тебя GRUB:
bashsudo nano /etc/default/grub
Находим строку:
iniGRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
И приводим к виду:
iniGRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=1234-5678-90ab-cdef resume_offset=123456"
(подставь свой UUID и свой offset)
Обновляем grub:
bashsudo grub-mkconfig -o /boot/grub/grub.cfg
bashsudo nano /etc/mkinitcpio.conf
В строке HOOKS= resume должен быть после filesystems, например:
iniHOOKS=(base udev autodetect modconf block filesystems resume fsck)
Пересобираем initramfs:
bashsudo mkinitcpio -P
Перезагрузи систему, затем выполни:
bashsystemctl hibernate
Если:
ноутбук полностью выключился
при включении восстановилась сессия
🎉 Гибернация работает
По умолчанию GNOME её скрывает.
bashsudo nano /etc/systemd/logind.conf
Раскомментируй / добавь:
iniHandleHibernateKey=hibernate
Ищи в extensions.gnome.org:
Hibernate Status Button
Power Menu
❌ После гибернации чёрный экран
неправильный resume_offset
забыли resume в mkinitcpio
❌ Не хватает swap
swap меньше RAM → увеличь файл
❌ NVMe + Btrfs
работает, но resume_offset обязателен
Если хочешь:
под systemd-boot
под Btrfs + subvolumes
или сделать zram + swapfile
скажи, уточним под твою конфигурацию 👍
Отличный вопрос — ты уже в нужном месте, осталось просто правильно прочитать вывод 👍
Сейчас объясню где именно смотреть и какое число тебе нужно.
Нам нужен resume_offset —
👉 это physical_offset первого экстента (строка с ext: 0).
Самая первая строка таблицы:
makefile0: 0.. 0: 20418560.. 20418560: 1:
Формат такой:
makefileext: logical_offset : physical_offset : length
ext: 0iniphysical_offset = 20418560
🎯 ВОТ ОНО.
resume_offsetiniresume_offset=20418560
(в блоках по 4096 байт — именно так и нужно)
bashfindmnt / -o SOURCE,UUID
Допустим, у тебя:
iniUUID=abcd-1234
bashsudo nano /etc/default/grub
Пример итоговой строки:
iniGRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=abcd-1234 resume_offset=20418560"
⚠️ UUID — твой, offset — 20418560
bashsudo grub-mkconfig -o /boot/grub/grub.cfg
resume hookbashsudo nano /etc/mkinitcpio.conf
Должно быть примерно так:
iniHOOKS=(base udev autodetect modconf block filesystems resume fsck)
Пересборка:
bashsudo mkinitcpio -P
bashsystemctl hibernate
Если система:
полностью выключилась
и после включения всё восстановилось
🎉 Гибернация настроена правильно
❌ брать offset из середины — нельзя
✅ ВСЕГДА берётся physical_offset из ext: 0
у тебя это 20418560
Если хочешь — скажи:
GRUB или systemd-boot
SSD / NVMe / Btrfs
ноут или ПК
Проверим конфиг на 100% и добьём до идеала 😎
Отлично, это как раз systemd-initramfs схема 👍
Тут есть важный нюанс: resume добавляется по-другому, чем в “классическом” примере.
Твой текущий вариант:
iniHOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)
🔴 Менять его НЕ нужно
🔴 resume добавлять НЕ нужно
Почему:
при systemd не используется resume hook
гибернацией занимается systemd-hibernate-resume
Ты уже должен иметь:
iniresume=UUID=XXXX resume_offset=20418560
Проверь:
bashcat /proc/cmdline
Там должно быть что-то вроде:
python-repl... resume=UUID=abcd-1234 resume_offset=20418560 ...
Если есть — отлично.
Проверь наличие бинарника:
bashls /usr/lib/systemd/systemd-hibernate-resume
Если файл есть — всё ок (в Arch он есть по умолчанию).
Даже если hooks не менялись:
bashsudo mkinitcpio -P
✔ systemd HOOKS — оставляем как есть
✔ resume в HOOKS — НЕ добавляем
✔ resume= и resume_offset= — добавлены в kernel cmdline
✔ mkinitcpio -P — выполнен
После перезагрузки:
bashsystemctl hibernate
Если вдруг:
система выключается, но не восстанавливается
или грузится «чисто»
скажи:
bashjournalctl -b -1 | grep -i resume
и
bashjournalctl -b -1 | grep -i hibernate
Разберём логи и починим 💪
Ты уже почти на финише.
Мы используем cookie-файлы, чтобы помочь этому сайту функционировать, понимать использование услуг и поддерживать маркетинговые усилия. Посетите «Управление cookie-файлами», чтобы изменить настройки в любое время. Ознакомьтесь с нашей политикой использования cookie-файлов для получения дополнительной информации.