mv: невозможно переместить «home» в «home-old»: устройство или ресурс заняты

Нет, вам не хватает простой опции, позволяющей отказаться от строки total, по крайней мере, при перечислении содержимого каталога (включая текущий, без аргументов). Например, в GNU ls опции -l, -g, -n, -o и -s вызывают отображение строки total без возможности ее отключения:

if (format == long_format || print_block_size)
{
  const char *p;
  char buf[LONGEST_HUMAN_READABLE + 1];

  DIRED_INDENT ();
  p = _("total");
  DIRED_FPUTS (p, stdout, strlen (p));
  DIRED_PUTCHAR (' ');
  p = human_readable (total_blocks, buf, human_output_opts,
                      ST_NBLOCKSIZE, output_block_size);
  DIRED_FPUTS (p, stdout, strlen (p));
  DIRED_PUTCHAR ('\n');
}

Это фактически предписано POSIX.

Однако, если вы укажете файлы для списка, а не каталог, ls не покажет общее количество; опция -d заставляет рассматривать каталоги как файлы, что дает желаемый результат, как упоминал Костас:

ls -ld *

выдаст тот же результат, что и

ls -l

за вычетом строки total, если ваша оболочка не включает скрытые файлы при расширении * (dotglob) и если текущий каталог не содержит так много файлов, что расширение * превышает максимальную длину командной строки.

Вы можете указать и каталог (ls -ld /path/to/directory/*), но в результате будут перечислены файлы с заданным путем, в отличие от ls -l /path/to/directory.

10
08.03.2017, 16:11
3 ответа

mv: невозможно переместить «/ home» в «/ home-old»: устройство или ресурс заняты

Единственное «использование» [*], которое я могу придумать, которое содержит имя файл от изменения, это точка монтирования.

Что еще я могу проверить?

Я не уверен, но, возможно, это могло произойти, если монтирование все еще существует в другом пространстве имен монтирования. Потому что по какой-то причине размонтирование не распространяется из корневого пространства имен? Или, глядя на результат в моей системе, возможно, службы systemd с 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

Обратите внимание на эту проблему - невозможно переименовать / home, несмотря на то, что она не отображается как точка монтирования (в текущем пространстве имен) - должна быть исправлено в ядре 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

Проверить пространство имен данного процесса:

{{ 1}}
# cat /proc/1/task/1/mountinfo

[*] EBUSY Не удалось переименовать, потому что oldpath или newpath - это каталог, который {{1 }} используется некоторым процессом (возможно, как текущий рабочий каталог, или как корневой каталог, или потому что он был открыт для чтения) или используется системой (для пример в качестве точки монтирования) , а система считает это ошибкой. (Обратите внимание, что нет необходимости - возвращать EBUSY в таких случаях - нет ничего плохого в том, что все равно выполняет переименование - но разрешено возвращать EBUSY, если {{ 1}} в противном случае система не сможет справиться с такими ситуациями.)

12
27.01.2020, 20:01

Это был NetworkManager.

Выполнение systemctl stop mysqld httpd postfix ipmievd настроено atd rsyslog smartd crond irqbalance gssproxy polkit chronyd не помогло, но сделало таблицу процессов очень маленькой.

После systemctl stop NetworkManager я смог переименовать / home.

8
27.01.2020, 20:01

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

  1. Перезагрузил мою систему и во время выбора grub отредактировал строку, нажав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 :спасибо за ответ.

0
27.01.2020, 20:01

Теги

Похожие вопросы