Swap partition to swapfile
В этом посте пойдет речь о том как переделать swap-раздел в swapfile.
Есть у меня ноутбук c Manjaro Linux, в котором был swap-раздел. Затем решил я увеличить объем оперативной памяти, в связи с чем размер swap-раздела, тоже не плохо было бы увеличить. Но со swap-разделом это сделать не так уж и просто. Поэтому я решил поменять swap-раздел на swapfile. По ходу дела выяснилось, что чтобы убрать swap-раздел и увеличить основной раздел (куда установлен Linux), нужно чтобы все эти разделы не были смонтированы (mounted). Т.е. нужно загрузиться с флэшки и оттуда уже править разделы.
В общем последовательность дейстивий такая:
- загрузиться с загрузочного образа (флэшк / диска), который умеет редактировать разделы;
- удалить swap-раздел и увеличить основной раздел;
- создать swapfile;
- указать его в
/etc/fstab
; - прописать смещение (оffset) swapfile в конфигурацию GRUB, чтобы работала гибернация (hibernation);
Погнали.
Создание загрузочной флэшки.
Для это я использовал загрузочный образ SystemRescue. У них на сайте, есть описания как установить образ на флэшку. Я использовал dd.
$ dd bs=4M if=system-rescue.iso of=/dev/sdb status=progress oflag=sync
Где sdb это флэшка. С этим надо быть осторожней, потому что в случае ошибки, можно затереть указанный раздел / диск. Посмотреть доступные блочные (?) девайсы (диски например), можно утилитой lsblk.
Редактирование разделов.
Флэшка готова - загружаемся. Грузимся в графическую оболочку (для трухакиров есть консоль) и запускаем GParted. В GParted удаляем swap-раздел и увеличиваем основной. Все советуют перед этим делать бэкап, наверно не зря, но я не делал.
Здесь есть еще один момент. Я точно не помню, отключал ли я, перед удалением, swap-раздел. Вроде бы не отключал. :) Припоминаю, что когда грузился, система не могла найти swap-раздел и немного ругалась по этому поводу, но в итоге загрузилась нормально. Но я могу ошибаться, поэтому может быть стоит предварительно swap и отключить. Об этом можно почитать здесь.
Создание swapfile и добавление записи в /etc/fstab.
Делаем как написано здесь. Использование dd для создания, важно. Об этом есть по ссылке выше.
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
$ sudo chmod 0600 /swapfile
$ sudo mkswap -U clear /swapfile
$ sudo swapon /swapfile
Добавляем swapfile в /etc/fstab
/swapfile none swap defaults 0 0
Настраиваем гибернацию (hibernation).
Информацию брал здесь. Для начала, находим смещение swapfile. Для этого нужно выполнить команду:
$ filefrag -v /swapfile | awk '$1=="0:" {print substr($4, 1, length($4)-2)}'
Полученнное смещение надо указать в /etc/default/grub
. Для этого находим строчку
GRUB_CMDLINE_LINUX_DEFAULT
и добавляем в нее "resume=UUID=12345abc resume_offset=12393152
.
Где в resume указывается UUID раздела на котором находится swapfile, а resume_offset
равен полученному выше смещению.
Далее увеомляем об изменениях, GRUB:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Перезагружаемся. Если ОС загрузилась, значит (вовсе не значит) все что написано выше, работает.