Звідки Linux знає, де знаходиться його swap-розділ?


13

Я читав, що вам потрібно помістити розділ swap на жорсткий диск, а не на SSD.

Мої запитання такі:

  • Коли і як здійснюється "перевірка" дистрибутивом (або чимось іншим) для пошуку свого розділу Swap?
  • Чи трапляється це під час завантаження?
  • Він просто перевіряє всі доступні диски та шукає розділ із прапором 'swap'?
  • Що станеться, якщо є кілька подібних розділів?
  • Крім того, скільки мені потрібно мати розділів підкачки, якщо я запускаю, наприклад, два різні дистрибутиви на одному диску, скажімо, Fedora та Ubuntu?

17
Зауважте, що своп на SSD насправді був би справді чудовим свопом (macOS робить це протягом століть). Однак він збирається зробити додаткове читання / запис на SSD, що може скоротити термін його експлуатації.
Ноніме

20
Де ви читали, що своп повинен бути на жорсткому диску, а не на SSD? Також, скільки років була стаття чи коментар? Сучасні SSD-диски набагато кращі при вирівнюванні зносу і не виходять з ладу після повторних записів так, як вони робили, коли SSD-диски були новими. Крім того, якщо у вас є комп’ютер, на якому є лише SSD, то у вас дійсно немає великого вибору, крім того, щоб взагалі не використовувати swap
JDS

2
@zakinster: А що робити, коли накопичувач 1 ТБ завжди заповнений? Потреби у зберіганні збільшились із забезпеченням зберігання.
Гонки легкості на орбіті

3
Іншими словами, "так, я погоджуюся, всупереч моєму попередньому твердженню фактичний розмір диска не має значення - це скільки його використовуєш"
Світлості в орбіті,

6
@DavidSchwartz І якщо ви "використовуєте своп у значних кількостях", а SSD призведе до значно менших сприйнятих втрат продуктивності системи, ніж жорсткий диск, кращим варіантом все-таки буде або додати більше оперативної пам’яті до системи, або зменшити віртуальний слід пам'яті вашого робочого навантаження певним чином зупинити значне використання свопів. Також зауважте, що існує різниця між довго працюючою системою, яка заповнила своп майже ніколи не використовуваними даними, порівняно із системою, яка активно
змінює

Відповіді:


24

Статично налаштований простір підкачки (тип, який використовується майже у кожному дистрибутиві) налаштований так /etc/fstabсамо, як і файлові системи.

Типовий запис виглядає приблизно так:

UUID=21618415-7989-46aa-8e49-881efa488132    none    swap     sw      0  0

Ви також можете побачити discardабо nofailвказані в полі прапорів (четверте поле). Кожен такий рядок відповідає одній області свопу (це не обов'язково повинен бути розділом, ви можете мати файли підкачки чи навіть цілі свопи диски).

У деяких дійсно конкретних випадках, натомість, ви можете динамічно налаштувати простір для обміну, хоча це досить рідко, оскільки це може спричинити проблематичну поведінку, пов’язану з управлінням пам'яттю. У цьому випадку конфігурація повністю обробляється компонентом простору користувача, який створює та дозволяє обмінюватися файлами у міру необхідності під час виконання.

Щодо того, скільки вам потрібно, відповісти на це складний питання, але кількість різних дистрибутивів Linux, які ви плануєте запустити, має на цьому нульовий вплив, якщо ви не хочете мати змогу запускати один дистрибутив, поки у вас є інший у сплячому режимі (а ви напевно, не хочу цього робити, оскільки це дуже простий спосіб накрутити вашу систему).

Коли ви запустите інсталятор майже для будь-якого великого дистрибутива (включаючи Fedora, OpenSUSE, Linux Mint, Debian та Ubuntu), він виявить усі існуючі розділи для заміни в системі та додасть їх до конфігурації для розподілу, який ви встановлення (за винятком, можливо, якщо ви вибрали ручне розділення), і в більшості випадків це призведе до розумного налаштування системи.

Навіть окрім цього, я особисто пропоную уникати наявності декількох розділів своп, якщо ви не говорите про серверну систему з великою кількістю дисків, і навіть тоді вам дійсно потрібно знати, що ви робите, щоб налаштуватись, щоб вона працювала добре .


Якщо у вас є 2 дистрибутива Linux, у вас може бути один підкачаний розділ для системи ... тож ви можете спробувати перейти в сплячку та відновити ... (краще використовувати різні користувачі BTW, і вам також потрібні різні /tmpрозділи / каталог). Напевно, у цьому випадку краще мати віртуальні машини ...
Гастур,

Отже, що пропонується зробити одному, якщо у них є виділений розділ для swap на тому самому SSD, на якому встановлена ​​ОС Linux, однак, схоже, насправді немає підкачки або для його використання. Якщо я біжу, systemctl --all | grep swapя отримую два результати. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapі swap.targetобидва вони АКТИВНІ = неактивні та SUB = мертві . Як змусити мою систему використовувати область swap?
Rockin4Life33

21

скажімо, Fedora та Ubuntu?

... вони сьогодні є системними операційними системами.

Що відбувається в системних операційних системах

рідний механізм

Система використовує різні підрозділи. .mountодиничні файли дають йому змогу встановлювати томи. .swapодиничні файли доручають йому повідомити ядро ​​про swap-розділи. ( .serviceфайли блоку вказують, як запускати сервіси. І так далі.) Це основні системні механізми. Щоб прийняти їх, systemd сам розщеплює дочірні процеси, які здійснюють відповідні системні дзвінки.

Якщо ви використовуєте systemctlкоманду (з --all) у такій системній операційній системі, вона розповість про завантажені .swapблоки. Наприклад:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap завантажений активним активним / dev / disk / by partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap завантажений активним активним / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b33
dev-sda5.swap завантажений active active / dev / sda5

Він також розповість про .mountпідрозділи.

Системний адміністратор може на насправді писати такі .swapпоодинокі файли вручну, так само , як х може писати .service, .socketі інші поодинокі файли вручну. Сам systemd просто шукає одиничні файли у файловій системі. Вони є його рідним механізмом.

Можна навіть отримати systemd, щоб показати вам, що є в цих файлах одиниць і де у файловій системі їх можна знайти:

$ systemctl cat dev-disk-by \\ x2duuid-1bb589e8 \\ x2d929f \\ x2d4041 \\ x2d81f4 \\ x2dff2b339b4e2a.swap 
# /run/systemd/generator/dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap
# Автоматично генерується системою-fstab-генератором

[Одиниця]
SourcePath = / etc / fstab
Документація = man: fstab (5) man: systemd-fstab-generator (8)

[Обмін]
Що = / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Параметри = sw
$ 

автоматично створені одиничні файли

Можна написати їх від руки. Однак зазвичай такі .mountта .swapодиничні файли автоматично генеруються програмами, відомими як генератори . Два таких генераторів є systemd-fstab-generatorі systemd-gpt-auto-generator. Вони обидва запускаються на початку завантажувального процесу та у відповідь на systemctl daemon-reloadкоманду, і (як ви бачите вище) вони генерують ціле завантаження одиничних файлів у незадокументований підкаталог в /run/systemd/. Сам systemd просто використовує створені одиничні файли .

Колишній генератор читає /etc/fstab, розпізнаючи декілька системних розширень до цього файлового формату. Як я вказав у відповідь коментарі, традиційно розділ підкачки має тип монтування з swі як один виявлять , що інші операційні системи розпізнають підкачки записів в цій таблиці. Але програмне забезпечення Linux взяло альтернативний варіант розпізнавання типу VFS , шукаючи його swapяк тип VFS. systemd-fstab-generatorтут не є винятком, і саме так воно інтерпретується, /etc/fstabперетворюючи його у власні механізми.

Останній генератор обробляє таблицю розділів EFI, що знаходиться на тому ж диску, на якому зберігається системний розділ EFI, шукаючи записи таблиці розділів EFI, які мають різні відомі GUID-файли типу розділів . Одним з таких GUID є звичайний GUID, призначений для Linux-розділів своп; і якщо systemd-gpt-auto-generatorзнайде розділ з цим GUID (який відповідає критеріям, наведеним у системному doco), він зробить .swapдля нього одиницю; взагалі не /etc/fstabбере участь .

Звичайно, цей процес має безліч побічних ефектів. Наприклад, оскільки /etc/fstabне має первинного ключа до таблиці, записи можуть мати повторювані поля "spec" і "файл" (тобто "що" і "де"). Однак у власному системному механізмі поле "файл" (тобто "де") - це унікальний ключ для .mountодиниць, вбудованих у назви одиниць. Жоден два .mountпідрозділи не можуть поділитися ним. Для .swapодиниць поле "spec" (тобто "що") є унікальним ключем для одиниць. Жоден два .swapпідрозділи не можуть поділитися цим. Таким чином, не всі записи в /etc/fstabобов'язково конвертуються в нативні механізми і працюватимуть, особливо якщо люди роблять такі речі, як перелік однієї і тієї ж точки монтажу для двох різних цілей або перераховують один і той же розділ swap двома різними способами.

Аналогічно, оскільки він переклав /etc/fstabна основний механізм, а вроджений механізм systemd має інші способи активації блоків , поведінка тонко відрізняється від поведінки несистемних операційних систем. За .mountзамовчуванням пристрій автоматично активуєтьсяsystemd-udevd , навіть після завантаження, у відповідь на появу змонтованого пристрою зберігання даних. Або він може бути перелічений як Wants=або, або Requires=деякий .serviceабо .socketпідрозділ, що означає, що він буде (повторно) активований, коли вони є. Є навіть RequiresMountsFor=.

програми встановлення та системний спосіб

Традиційно програми встановлення операційної системи та системний адміністратор після перенастроювання системи мають письмові swзаписи /etc/fstab. Ось так автоматично створюються нативні .mountта .swapодиниці. Утиліта встановлення / конфігурації "знає", куди був поміщений файл swap, тому що в своєму користувальницькому інтерфейсі системний адміністратор зробив якийсь вибір і записує /etc/fstabвідповідність. Іноді цей вибір - це те, що я потребую, щоб ти зробив мені розділ для заміни як частина установки. ; іноді це просто використовувати розділ swap, який ви вже знайшли на диску. (інсталятори, які також переглядають типи розділів).

Але у системних людей є така ідея операційних систем, які автоматично конфігурують себе з майже порожнього /etcдерева, так званих систем без громадянства , і саме про це є механізми, як генератор, який читає таблицю розділів EFI. У плані systemd людей немає /etc/fstab, і взагалі немає постійних даних про конфігурацію /etc, і все це виводиться із вмісту таблиці розділів на диску , на кожному завантажувальному і в кожному завантажувальному systemctl daemon-reload. Нині вони просувають програми встановлення операційної системи, ніж не пишуть/etc/fstab .

У традиційній схемі, звичайно, ви можете дійсно мати кожну операційну систему своїм приватним розділом swap, і не допускати, щоб вони торкалися своп розділів. Дійсно, якщо ви використовуєте сплячий режим для диска через swap-розділ і очікуєте, що зможете перезавантажитись до іншої операційної системи, перебуваючи в сплячому режимі ( це дуже погана ідея, оскільки дуже легко викликати пошкодження файлової системи таким чином ), що буде необхідні.

У системній схемі, навіть якщо операційна система ще не є такою, як системні люди її передбачають і "без громадянства", вищезазначені генератори працюють; і, таким чином, всі розділи підкачки (на диску ESP / root) з необхідним типом розділу автоматично використовуються всіма системними операційними системами. Оскільки вони будуть обмінюватися усіма автоматично виявленими розділами свопу, одному дійсно не потрібно створювати один підкачаний розділ на встановлену операційну систему.

Подальше читання


Дуже приємно - дякую за пояснення!
Енді Далтон

Є частина мене, яка хоче насправді проголосувати за те, щоб говорити про systemd. Але, звичайно, це несправедливо (а також систематично або ні, не означає, що ви помиляєтеся), і я, як правило, не піддаю голосування за те, що мені ніколи не здавалося, що це є правильним способом бути конструктивним. Однак приємно написати, тому, незважаючи на посилання на Леннарта, я відповів за цю відповідь. Якщо ніщо інше ви не доклали зусиль, і це слід похвалити. Я коротко прочитав про сміття без громадянства, і це щось, що швидше ... Я навіть не впевнений, що це робить, я просто залишу це на цьому.
Прифтан

13

Історично склалося, що розділ swap задається у /etc/fstabзаписі типу swap. Під час завантаження процеси запуску зчитують цей файл і підштовхують цю конфігурацію до ядра.

Приклад запису /etc/fstab:

/dev/sdb    none    swap     sw      0  0

Я не знайомий з тим, як systemdуправляє свопом, але я вважаю, що кінцевий результат той самий: процес простору користувача усвідомлює, який простір виділяється для swap, а процес користувальної області повідомляє ядро.


Запитуючий запитав про Linux, і це не так для Linux; але це властиво Linux. Інші операційні системи, такі як FreeBSD, наприклад, розпізнають записи свопінгу /etc/fstabз їх swтипу монтування, а не з swapтипу VFS.
JdeBP

1
Відповідь не стосується всіх частин питання.
Сергій Колодяжний

Я також хочу зазначити, що ця відповідь теж застаріла у світі системних операційних систем. Він не враховує systemd-gpt-auto-generator.
JdeBP

2
Що ви маєте на увазі, що systemd не використовує fstab? Звичайно, так і є!
psusi

1
@psusi: systemd розуміє, але не вимагає fstab.
MSalters

4

Всі інші відповіді згадують, як вказати на файлову систему swap під час завантаження.

Однак до інших відповідей слід додати декілька пунктів:

  • простір підкачки також може бути файлом;
  • розділ простору заміни зазвичай позначається як тип 0x82;
  • ви можете змонтувати місце для заміни в будь-якій точці виконання;
  • щоб розмітити / ініціалізувати розділ / файл, щоб його можна було розпізнати та використовувати / змонтувати пізніше як простір swap, потрібно використовувати команду mkswap;
  • для активації / використання вручну розділу / файла ви використовуєте команду swapon;
  • подібно до того, як замінити його, ви йдете з swapoff.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.