перевстановити клієнт NFS без перезавантаження


10

Я працюю на своєму сервері, з якого експортую один каталог за допомогою NFS. Звичайно, протягом тижня або близько того, як перезавантажувати сервер, я кілька разів забував umountекспортувати файлову систему на своїй робочій станції (яка встановлюється з /etc/fstabзавантаження). Між тим я зміг umountпісля факту і перерахувати (я не користуюся autofs):

umount -fl /data0
mount /data0

Але це вже не працює.

Я не можу змонтувати експортований каталог із сервера в інший каталог (mount visi), але я можу nfs змонтувати цей експортований dir на віртуальній машині, що працює на моїй робочій станції.

Те , що я намагався це видалення ( rmmod) з nfsі nfsv3модуль (який не буде працювати: Resource temporarily unavailable). lsofвисить. mountне показує нічого, встановленого через nfs. Це, мабуть, результат використання декількох разів "umount -l", але перші два рази це спрацювало без проблем.

Я перезапустив сервер в середній час, після того, як не міг змонтуватися, не маючи жодної різниці. Я також використовував service nfs-kernel-server restart. Я підозрюю, що все повернеться до норми, якщо я перезавантажую клієнтську робочу станцію.

Чи є спосіб відновитись від цього і реініціалізувати клієнтську сторону nfs на моїй робочій станції без перезавантаження?
Якщо я не можу виправити це без перезавантаження, чи не повториться це, якщо я почну використовувати autofs?

lsof -b висить з останніми рядками:

lsof: avoiding readlink(/run/user/1001/gvfs): -b was specified.
lsof: avoiding stat(/run/user/1001/gvfs): -b was specified.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
      Output information may be incomplete.

у рядках, що передували цьому, немає /data0.

Запис у /etc/fstab:

192.168.0.2:/data0 /data0  nfs  defaults,auto,nolock,user 0 2

"але перші два рази це спрацювало без проблем" ... нагадує мені російську рулетку. Чи має lsof -bвішати?
muru

@muru Так, це висить, я оновив Q з виходом. До речі, я ніколи не чув, щоб хтось скаржився на програш із російською рулетою, тому це повинна бути безпрограшна гра. Я, як правило, очікую, що речі не працюватимуть ніколи, ніколи, ні завжди, не деякі рахують X разів, але, можливо, обставини були іншими.
Антон

Який дистрибутив ви використовуєте? Процес дуже різниться.
Graeme

@Graeme Це Lintx Mint 17.1 (Ребекка)
Антон

Не впевнений, як це працює в Ubuntu з upstartусіма. Напевно, ви хочете перезапустити всі послуги в nfs-commonпакеті, схоже, їх декілька. Порядок, ймовірно, має значення і тому, спробуйте зупинитись та почніть в порядку залежності. Ви, ймовірно, також хочете зробити rpcbindяк останню зупинку / перший старт. Я робив це раніше на Debian, але це просто одна приємна nfs-commonпослуга.
Graeme

Відповіді:


5

Як @PaperMonkey запропонував у коментарях, ви можете бути накрученими, оскільки ви використовували параметри кріплення за замовчуванням, які включають повторну спробу.

intrРаніше було способом полегшити переривання речей, що застрягли на вході / виводу, на зламане кріплення NFS, але тепер це не працює. SIGKILLвсе ще можуть перервати процеси, застряглі в NFS, принаймні так nfs(5)стверджує Ознайомтеся з цією сторінкою щодо параметрів кріплення.

Використовуйте softзамість за замовчуванням, hardякщо ви хочете, щоб NFS не повторювався повторно.

Я також рекомендую користуватися автомашиною. Створіть посилання / net / host / foo / bar десь, якщо хочете.

Часто простіше просто перезавантажити, але я думаю, що теоретично ви повинні мати можливість kill -9(тобто kill -KILL) будь-які процеси, застряглі в NFS. ЦІЙ кількість -f може працювати. Будьте обережні, щоб не дозволити заповненню вкладки отримати більше процесів, що застрягли на кріпленні NFS.


Теоретично, але важко знайти ті процеси, коли lsof висить.
kmarsh

@kmarsh: будь-який процес у стані D(сон-диск) у ps / top, ймовірно, застряг на NFS.
Пітер Кордес

1
Зверніть увагу, що при використанні "soft" замість "hard" існує можливість втрати даних щоразу, коли NFS-сервер тимчасово недоступний.
Marki555

4

Нижче наведено список команд, які потрібно виконати, щоб виправити цю проблему в дистрибутиві на основі RPM.

service rpcbind stop
service nfslock stop
rm -rf /var/lib/nfs/statd/sm/*
rm -rf /var/lib/nfs/statd/sm.bak/*

Після того:

umount -f /share

1

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

Щоб вирішити проблему без перезавантаження, ви можете отримати за допомогою umount -a(відключити всі згадані в / etc / fstab) mount -a(монтувати все в / etc / fstab), але я, якщо каталог, який ви втратили, містить домашній каталог ви ' найкраще зберегти роботу в іншому місці та просто перезавантажити.


0

Використовуйте результати команди lsof, щоб знайти процеси на клієнті, що містить посилання на застарілу файлову систему, і знищити ці процеси.

umount -f / data0

запевнимо, що ви можете пінг-сервер, а потім перезавантажте накопичувач. Перезапустіть будь-які потрібні процеси.

Скупчення

Зауважте, що якщо ви запустили налаштування сервера кластерів, ви отримуватимуть нерівну обробку файлів nfs щоразу, коли сервер повинен перестати працювати. Щоб уникнути експорту вашої файлової системи за допомогою параметра fsid. Число для fsid має бути однаковим для кожної відповідної файлової системи на двох серверах. Ви повинні переконатися, що відбувається реплікація файлів. Дивіться фрагмент зі сторінки чоловіка нижче:

fsid = num | root | uuid NFS повинен мати можливість ідентифікувати кожну файлову систему, яку вона експортує. Зазвичай він використовує UUID для файлової системи (якщо файлова система має таке) або номер пристрою пристрою, що містить файлову систему (якщо файлова система зберігається на пристрої). Оскільки не всі файлові системи зберігаються на пристроях, і не всі файлові системи мають UUID, іноді необхідно чітко сказати NFS, як ідентифікувати файлову систему. Це робиться за допомогою параметра fsid =.

Для NFSv4 існує виділена файлова система, яка є коренем всієї експортованої файлової системи. Це вказується за допомогою fsid = root або fsid = 0, що означає точно те саме.

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

Ядра Linux версії 2.6.20 і новіших версій не розуміють налаштування UUID, тому для таких ядер потрібно встановити невелике ціле число. Підтримується встановлення як невеликої кількості, так і UUID, тому однакова конфігурація може бути виконана для роботи як на старих, так і нових ядрах.


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