mv: не може перейти з дому до «домашнього старого»: пристрій або ресурс зайнятий


10

Я хочу замінити /homeсимвольне посилання на мої домашні dirs.

Увійшов лише root, / home не є окремою файловою системою, lsof не показує блокування, selinux - вседозволений. Що я пропускаю?

Я входив безпосередньо як root через ssh:

[root@usil01-sql01 /]# uname -a
Linux usil01-sql01 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@usil01-sql01 /]# w
 15:30:33 up  1:41,  1 user,  load average: 0.00, 0.02, 0.22
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/2    10.50.11.114     15:13    1.00s  0.19s  0.01s w

[root@usil01-sql01 /]# lsof | grep /home

[root@usil01-sql01 /]# lsof +D /home

[root@usil01-sql01 /]# df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        63G  4.1G   56G   7% /

[root@usil01-sql01 /]# mount | grep -w /
/dev/sda2 on / type ext4 (rw,relatime,seclabel,data=ordered)

[root@usil01-sql01 /]# ls -lFd /home
drwxr-xr-x. 3 root root 4096 Mar  7 13:36 /home/

[root@usil01-sql01 /]# getenforce
Permissive

[root@usil01-sql01 /]# mv /home /home-old
mv: cannot move "/home" to "/home-old": Device or resource busy

Що ще я можу перевірити?

Більше інформації про систему:

[root@usil01-sql01 /]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 836.6G  0 disk 
|-sda1   8:1    0 768.6G  0 part /storage
|-sda2   8:2    0    64G  0 part /
`-sda3   8:3    0     4G  0 part [SWAP]
sr0     11:0    1  1024M  0 rom  

[root@usil01-sql01 /]# blkid
/dev/sda2: UUID="5ba6a429-4c65-4023-82b4-3673bfcf6a88" TYPE="ext4" 
/dev/sda3: UUID="b5eb680f-8789-43b2-9f7e-c52570b0eb73" TYPE="swap" 
/dev/sda1: UUID="cb22d57d-4a5b-4963-a990-890abe0c56dc" TYPE="ext4" 

Спробуйте варіант лінивого змісту, як це булоumount -f -l /home
Валентин Байрамі

Спробуйте знайти підозрілий процес, який витрачає багато ресурсів, не знаючи вас з topабо ps. Вони намагаються спостерігати, що він робить зараз, використовуючи strace. Така ситуація дивна тмм. ОНОВЛЕННЯ: також подвійне перевірити lsofвихід з fuserодним про всяк випадок.
ddnomad

1
@ val0x00ff, як ви бачите на виході вище, / home не є точкою кріплення.
TheAmigo

1
@ddnomad fuser / home також не має виходу. Це щойно встановлена ​​система, що не працює, без зайнятих процесів.
TheAmigo

@TheAmigo я бачу. Я припускаю, що ви вже намагалися просто перезавантажити хост. Ви також можете спробувати перейти в безпечний режим з меню GRUB і спробувати його там.
ddnomad

Відповіді:


9

mv: не вдається перемістити "/ home" до "/ home-old": Пристрій чи ресурс зайняті

Єдине "використання" [*], яке я можу придумати, яке містить ім'я файлу від зміни, - це точка монтажу.

Що ще я можу перевірити?

Я не впевнений, але, можливо, це могло б статися, якщо гора все ще існує в іншому просторі імен. Оскільки, чомусь, це не отримує unmounts, що поширюються з кореневого простору імен? Або дивлячись на результат в моїй системі, можливо, з системними службами ProtectHome?

$ grep -h home /proc/*/task/*/mountinfo | sort -u
121 89 0:22 /systemd/inaccessible/dir /home ro,nosuid,nodev shared:142 master:24 - tmpfs tmpfs rw,seclabel,mode=755
275 243 253:2 / /home ro,relatime shared:218 master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
321 288 253:2 / /home rw,relatime shared:262 master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
84 64 253:2 / /home rw,relatime shared:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
85 46 253:2 / /home rw,relatime master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered

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

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-3.18.y&id=8ed936b5671bfb33d89bc60bdcc7cf0470ba52fe


як дізнатися простір імен певного процесу?

lsnsможе бути корисним, якщо ви можете встановити його. Більше можливих команд:

Список просторів імен кріплення:

# readlink /proc/*/task/*/ns/mnt | sort -u

Визначте простір імен кореневого кріплення:

# readlink /proc/1/ns/mnt

Знайдіть процеси із заданим простором імен для монтування

# readlink /proc/*/task/*/ns/mnt | grep 4026531840

Перевірте простір імен для даного процесу:

# cat /proc/1/task/1/mountinfo

[*] EBUSY Перейменування не вдається, оскільки oldpath або newpath - це каталог, який використовується деяким процесом (можливо, як поточний робочий каталог, або як кореневий каталог, або тому, що він був відкритий для читання) або використовується системою (для приклад як точка монтажу) , хоча система вважає це помилкою. (Зверніть увагу, що немає необхідності повертати EBUSY в таких випадках - немає нічого поганого в тому, щоб зробити перейменування все одно - але дозволяється повернути EBUSY, якщо система інакше не може вирішити подібні ситуації.)


/ home ніколи не був монтом у будь-якому просторі імен.
TheAmigo

Це означає, що ви використовували команди уздовж рядків, які я запропонував? Оскільки "ніколи" не є дуже сильним твердженням, мої команди не демонстрували цього. Я на початку додав команду, яка була б простішою (і, сподіваюся, функціональною :), і друга міркування, чому це може статися на основі результату в моїй системі.
sourcejedi

Я знайшов ще одну "розбиту" машину, і ваша команда grep дійсно вказує пальцем на NetworkManager. Таким чином, моя функція "зупинити NM, перейменувати, перезапустити NM" працює, але ваш жар mountinfo - це те, що знайти винуватця.
TheAmigo

(тому що /lib/systemd/system/NetworkManager.service використовує ProtectHome, принаймні, у системах, на які ми дивимось)
sourcejedi

6

Це був NetworkManager.

Запуск systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronydне допоміг, але зробив таблицю процесів дуже маленькою.

Після цього systemctl stop NetworkManagerя зміг перейменувати / додому.


Мені потрібно було зробити лише "сервіс NetworkManager stop", а потім зміг переміститися / додому, потім зробив перезавантаження, щоб переконатися, що все добре.
sdjuan

Дуже дякую. Це зовсім не очевидно, і мені довелося прочитати десятки сторінок, що розповідають про / home як про місце монтування, що, очевидно, не в питанні про ОП. Я виявив, що зупинка NetworkManager також допомогла в моєму випадку, запустивши Redhat 7.6.
лабрадорт

0

Ви можете завантажуватись на одного користувача та вносити будь-які зміни у домашній каталог.

  1. Перезавантажив мою систему та під час вибору грубого вибору редагуйте рядок натисканням e
  2. У linux16рядку вилучені rhgb& quiteпараметри і поставлені в їх розміщені init=/bin/bash.
  3. Натиснута ctrl+xдля запуску. Це підкаже на консолі bash.
  4. Перерахуйте за /допомогою параметрів читання / запису, видавшиmount -o remount,rw /
  5. Після цього ви можете відредагувати /homeкаталог, перейменувати його тощо.
  6. Після закінчення роботи відновіть selinux шляхом випуску touch /.autorelabel
  7. Нарешті виконати exec /sbin/initдля запуску завантаження як звичайно.

@sourcejedi: дякую за вашу відповідь.

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