Как создать swap больше 230Гб?

Knoppix

Модераторы: Warderer, Модераторы разделов

KrackMan
Сообщения: 4
Статус: Заполнен
ОС: Debian 10

Как создать swap больше 230Гб?

Сообщение KrackMan »

Всем доброго дня!
Может кто сталкивался с похожей проблемой поделитесь опытом и знаниями.
Вводные:
Spoiler

Shell

#cat /proc/version
Linux version 4.19.0-6-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.67-2 (2019-08-28)

#lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster

#free -h
total used free shared buff/cache available
Mem: 3,8Gi 3,7Gi 102Mi 0B 45Mi 8,0Mi

#cat /proc/cpuinfo
model name : Intel(R) Core(TM) 2 CPU 6300 @ 1.86GHz
cache size : 2048 KB
Решаяемая задача требующая много SWAP:
Spoiler
Полетел раид 50 из 8-ми 2 Тб дисков (Полезного места 10 Тб).
Пытаемся восстановить (забегая наперед - нет не храним важные данные, но восстановление - дело принципа и опыта). На этапе проверок целостности системы fsck, оказалось, что для такого объема требуется много SWAP места. И вот тут началось самое интересное.
При попытке запустить SWAP на диске больше 230Гб swapon монтирует только 230Гб.
Что пробовали:
1. fdisk -> формат в SWAP раздел. Получаем весь объем диска (последний подключили на 1Тб) -> делаем "swapon /dev/sdl1" и "swapon -s" говорит что всё "хорошо" 230 Гб подключил.
2. fdisk -> формат линукс раздел, с файловой системой ext4 (чтобы уйти от ограничения на размер файла) -> # fallocate -l 900G /mnt/disk1/swapfile (Размер в 900 подобрали, что бы система не сообщала о том, что место кончилось, но это не суть важно) -> делаем "swapon /mnt/disk1/swapfile" и "swapon -s" говорит что всё "хорошо" 230 Гб подключил.

Пока для преодоления этого ограничения создаём на 1Тб диске 4 раздела по 230Гб помеченных как "Linux swap"

Shell

Disk /dev/sdl: 931,5 GiB, 1000204886016 bytes, 244190646 sectors
Disk model: DT01ACA100
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 47E443F2-C54E-E54B-8CD2-DF08A5CA421D

Device Start End Sectors Size Type
/dev/sdl1 256 60293375 60293120 230G Linux swap
/dev/sdl2 60293376 120586495 60293120 230G Linux swap
/dev/sdl3 120586496 180879615 60293120 230G Linux swap
/dev/sdl4 180879616 244190640 63311025 241,5G Linux swap

Ну и собственно всё это скармливаем swapon

Shell

#swapon -s
Filename Type Size Used Priority
/dev/sdl1 partition 241172476 0 -6
/dev/sdf1 partition 244189612 1098976 -2
/dev/sdf2 partition 244190048 0 -3
/dev/sdf3 partition 244190480 0 -4
/dev/sdf4 partition 244189888 0 -5
/dev/sdl2 partition 241172476 0 -7
/dev/sdl3 partition 241172476 0 -8
/dev/sdl4 partition 253244096 0 -9
В итоге получаем 1,8 Тб свопа. Но вот эти костыли не очень понятны.

Shell

#free -h
total used free shared buff/cache available
Mem: 3,8Gi 3,7Gi 115Mi 0B 28Mi 12Mi
Swap: 1,8Ti 4,2Gi 1,8Ti
Кто нибудь знает как это победить?
PS
Все проблемы делятся на 2 типа:
1. Такая проблема только у нас и всем пофиг
2. Такая проблема у всех и всем пофиг
Так вот пока нам подходит пункт 1 :)
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Как создать swap больше 230Гб?

Сообщение Hephaestus »

Я ради интереса попробовал.
Файл на 900Gb мне создавать негде, но на 500Gb создал.
dd if=/dev/zero of=swapfile bs=1G count=500

Сделал из этого файла swap

Shell

mkswap swapfile
Устанавливается пространство для swap версии 1, размер = 500 GiB (536870907904 байт)
без метки, UUID=5d16face-f6a2-4ee8-87da-7001a1581915
Подключил

Shell

swapon swapfile
Проверил, что получилось

Shell

swapon -s
Filename Type Size Used Priority
/media/sdj1/swapfile file 524287996 0 -1
Ещё раз проверил

Shell

swapon --show
NAME TYPE SIZE USED PRIO
/media/sdj1/swapfile file 500G 0B -1
И ещё раз проверил

Shell

free -h
total used free shared buff/cache available
Mem: 7,0Gi 4,3Gi 372Mi 46Mi 2,3Gi 2,2Gi
Swap: 499Gi 0B 499Gi
Как видите, всё подхватывается.
Поэтому вот это
KrackMan писал:
22.04.2021 02:13
Такая проблема только у нас
очень похоже на правду.
KrackMan писал:
22.04.2021 02:13
Кто нибудь знает как это победить?
Как победить, не знаю.
Знаю только, что работа со swap зависит от ядра и архитектуры
man mkswap писал(а): The maximum useful size of a swap area depends on the architecture and the kernel version.
The maximum number of the pages that is possible to address by swap area header is 4294967295 (UINT_MAX). The remaining space on the swap device is ignored.
Presently, Linux allows 32 swap areas. The areas in use can be seen in the file /proc/swaps
mkswap refuses areas smaller than 10 pages.
В Вашем случае, возможно, ещё и systemd влияет на это дело (точно не знаю, но в арч-вики это упоминается и у них даже пакет systemd-swap какой-то есть).
А ещё ответ может быть где-нибудь в недрах ядерной документации. Но в это мне углубляться откровенно лень.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4458
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Как создать swap больше 230Гб?

Сообщение Rootlexx »

KrackMan писал:
22.04.2021 02:13
Кто нибудь знает как это победить?
Можете попробовать так: https://serverfault.com/a/9233
Спасибо сказали:
KrackMan
Сообщения: 4
Статус: Заполнен
ОС: Debian 10

Re: Как создать swap больше 230Гб?

Сообщение KrackMan »

Hephaestus писал:
22.04.2021 11:50
Я ради интереса попробовал.
Файл на 900Gb мне создавать негде, но на 500Gb создал.
dd if=/dev/zero of=swapfile bs=1G count=500

Сделал из этого файла swap

Shell

mkswap swapfile
Устанавливается пространство для swap версии 1, размер = 500 GiB (536870907904 байт)
без метки, UUID=5d16face-f6a2-4ee8-87da-7001a1581915
Spoiler
Подключил

Shell

swapon swapfile
Проверил, что получилось

Shell

swapon -s
Filename Type Size Used Priority
/media/sdj1/swapfile file 524287996 0 -1
Ещё раз проверил

Shell

swapon --show
NAME TYPE SIZE USED PRIO
/media/sdj1/swapfile file 500G 0B -1
И ещё раз проверил

Shell

free -h
total used free shared buff/cache available
Mem: 7,0Gi 4,3Gi 372Mi 46Mi 2,3Gi 2,2Gi
Swap: 499Gi 0B 499Gi
Как видите, всё подхватывается.
Поэтому вот это
KrackMan писал:
22.04.2021 02:13
Такая проблема только у нас
очень похоже на правду.
KrackMan писал:
22.04.2021 02:13
Кто нибудь знает как это победить?
Как победить, не знаю.
Знаю только, что работа со swap зависит от ядра и архитектуры
man mkswap писал(а): The maximum useful size of a swap area depends on the architecture and the kernel version.
The maximum number of the pages that is possible to address by swap area header is 4294967295 (UINT_MAX). The remaining space on the swap device is ignored.
Presently, Linux allows 32 swap areas. The areas in use can be seen in the file /proc/swaps
mkswap refuses areas smaller than 10 pages.
В Вашем случае, возможно, ещё и systemd влияет на это дело (точно не знаю, но в арч-вики это упоминается и у них даже пакет systemd-swap какой-то есть).
А ещё ответ может быть где-нибудь в недрах ядерной документации. Но в это мне углубляться откровенно лень.
Спасибо за участие. Это уже как минимум для нас половина победы, осознание, что такого ограничения нет. :rolleyes: :drinks:
Спасибо сказали: