Як тримати роботу Linux після видалення жорсткого диска?


3

Я працюю на вбудованому пристрої Linux із жорстким диском USB. На цьому диску є файл swap. Жорсткий диск може бути вимкнений в будь-який момент, перш ніж повернути його на живлення через кілька секунд. Це призводить до різних повідомлень про помилки, таких як:

Write-error on swap-device
Kernel panic - not syncing: Attempted to kill init!

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

Моя мета - якось не допустити цього і відновити систему без перезавантаження ОС.

Я можу відкласти збій, зателефонувавши scsi_block_requests, але не можу їх тримати заблокованими назавжди.

Я намагався вбити деякі завдання в режимі користувача (використовуючи send_sig_info) у відповідь на USB_DEVICE_REMOVEповідомлення, але все ще отримую винятки.

Я також замислююся про те, чи можна запобігти руйнуванню пристрою SCSI при видаленні USB-пристрою, але тримати його навколо, а потім якось знову підключити його до нового USB-пристрою, який буде створено через кілька секунд, коли USB-пристрій знову буде живитись. Оскільки це той самий диск, можливо, я можу відновити всі очікувані запити без повторного монтажу диска.

Яка ваша думка? Можна щось подібне зробити? Або неможливо чисто відновити ОС після видалення жорсткого диска?


4
Вам дійсно потрібен swap-розділ на цьому томі?
Грег Хьюгілл

Як щодо того, щоб взагалі не було файлу swap? Якщо у вас достатньо оперативної пам’яті, ви все в порядку. Якщо ви цього не зробите, то все одно накрутили.
MarkR

1
З цікавості, як ви закінчилися накопичувачем на USB-диску? Єдине, що менш підходить для накопичувача, який я можу придумати, - це флеш-пам’ять або дискета.
Фредрік

Поміняйте свопом або не замініть, якщо з диска, який зникає, завантажуються будь-які бінарні файли, він також може виникнути проблеми. Тому також не завантажуйте код з цього диска.
asveikau

1
На жаль, для одного додатка потрібно більше оперативної пам’яті, ніж у мене, а USB - єдиний доступний диск. Було б нормально вбити цей додаток, коли диск відключений, але він не вмирає витончено, але виходить з ладу і панікує ядро.

Відповіді:


3

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

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


+1: дуже хороше інженерне рішення - якщо додаток можна змінити.
wallyk

1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.