Чому лінивий MNT_DETACH або `umount -l` небезпечний / небезпечний?


10

Я читав у кількох місцях, що не umount -lє безпечним:

У відповіді @cas :

не використовуйте umount«s --lazyваріант , якщо ви дбаєте про те, коли зовнішній накопичувач може бути безпечно відключений

Коментар @frostschutz :

umount --lazyне є безпечним і не може бути безпечним. [...]

Цей util-linux коментар Ruediger Meier :

Слід уникати використання umount -lвзагалі. Просто вбийте всі процеси, які використовуєте, /tmp/mountpointа потім виправдайте без варіанту -l.

Чому umount -lнебезпечний / небезпечний?

Чи є спосіб зробити це безпечним?

Відповіді:


12

Ледачий розряд створює гору кота Шредінгера

  • Ви не можете знати, чи пристрій насправді відключено чи ні
  • Файлова система "відключена" залишається доступною за деяких обставин
  • «Демонтована» файлова система НЕ доступна в деяких випадках

Існує помилкове почуття безпеки : виявляється, що файлова система відключена, але насправді вона прихована лише від простору імен файлів / герархії.

  • Процеси все ще можуть записувати через відкриті дескриптори файлів
  • Нові або наявні файли можуть бути відкриті для запису процесами з робочим каталогом всередині точки монтажу через відносні імена

Це означає, що якщо ви umount -l /media/hddбільше не зможете отримати доступ /media/hdd/dir/file(абсолютна назва шляху), але якщо у вас є процес з робочим каталогом, /media/hddвін все одно зможе створювати нові процеси, які можуть читати / записувати ./dir/file(відносне ім'я шляху).

Якщо ви спробуєте відключити пристрій, ви отримаєте заплутане повідомлення:

# umount --force --all-targets /dev/sdb2
umount: /dev/sdb2: not mounted

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

Оскільки існують різні неочевидні ситуації, які можуть призвести до блокування umount , файлова система все ще не може бути відключена, хоча lsof +f -- /dev/deviceнічого не показує.

Ви ніколи не дізнаєтесь, чи дійсно файлова система відключена. Неможливо це дізнатися.

Знімні пристрої

Якщо ви робите umount -lзнімний диск, ви перебуваєте в стані: ви не можете бути впевнені, що всі очікувані дані були записані на диск.

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

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

  • Пристрій отримає розширене ім'я пристрою, тобто /dev/sdbстає /dev/sdc. Повідомлення журналу ядра все ще можуть посилатися на це, /dev/sdbнавіть якщо цей пристрій більше не існує як файл під /dev. (Я знаю єдиний спосіб вирішити це - перезавантажити.)

  • btrfs може призвести до корупції. btrfs очікує, що одночасно присутня лише одна файлова система із заданим UUID. Ядро все ще бачить той самий UUID, який доступний на фантомному пристрої та новому пристрої. (Мені довелося відновити свій резервний жорсткий диск btrfs).

systemd gotchas


"Нові або існуючі файли можуть бути відкриті для запису процесами з робочим каталогом всередині точки монтажу через відносні імена шляхів" Це інформація, яку я шукав. Чи є у вас додаткові посилання чи посилання?
Джонатан Райнхарт

@Jonathon check man umount. Мені потрібно було б google інакше. Будь ласка, опублікуйте свої висновки, якщо ви це зробите.
Том Хейл

umount(2)Нещодавно я читав кілька разів. Він говорить лише "Виконайте ледачий відключення: зробіть точку монтажу недоступною для нових доступів, негайно відключіть файлову систему та всі файлові системи, встановлені під нею, один від одного та від таблиці кріплення, і фактично виконайте відключення, коли точка монтажу перестає бути зайнятою. . " Але, на жаль, це менш детально, ніж те, що ви надали.
Джонатан Райнхарт

umount(8)говорить, що файлова система зайнята, "наприклад, коли на ній є відкриті файли, або коли у якогось процесу є свій робочий каталог там, або коли використовується файл swap на ньому". Це не схоже на остаточний список, але, мабуть, так добре, як я зможу знайти.
Джонатан Райнхарт

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