В этом посте пойдет речь о том как переделать 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

Перезагружаемся. Если ОС загрузилась, значит (вовсе не значит) все что написано выше, работает.