Как перемонтировать специальное устройство proc, которого не существует?

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

Снова используя GNU sed и GNU awk и предполагая однородную структуру данных, используйте последний элемент как ключ сортировки:

# Separate input into records, here 3 lines each
sed '3~3G' infile |

# Use GNU awk's built-in sort, here index-string-descending
awk '
  BEGIN { PROCINFO["sorted_in"] = "@ind_str_desc" }
  { h[$NF] = $0 }
  END { for(k in h) print h[k] }
' RS= FS='[;\n]+'   

Выход:

n2;m2;l2;
a2;b2;c2;
d2;e2;f2;g2
a1;b1;c1; 
n1;m1;l1; 
d1;e1;f1;g1

2
18.10.2018, 17:31
2 ответа

То, что вы сделали с первым креплением, перекрывает оригинал /proc. Не удалять /tmp/test, а размонтировать:

leap:~ # mount -o bind /tmp/test/ /proc/
leap:~ # mount |  grep proc
mount: failed to read mtab: No such file or directory
leap:~ # umount /proc
leap:~ # mount |  grep proc
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=23,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13202)

Если вы удалили каталог перед размонтированием, вам придется перезагрузиться, я не уверен, но не думаю, что вы сможете перемонтировать /proc из этого состояния.

1
27.01.2020, 22:08

Чтобы избежать этого сообщения об ошибке, вам нужно сначала запустить другую команду:

root# mkdir /tmp/test && mount --bind /tmp/test/ /proc/
root# rm -rf /tmp/test
root# umount /proc/
root# mount -t proc proc /proc

Но вы, вероятно, начали с файловой системы procpsuedo -, смонтированной на /proc. В этом случае последняя команда покажет новое сообщение :

.
mount: /proc: proc already mounted on /proc

Вы можете избежать появления нового сообщения об ошибке, если дважды запуститеumount /proc/перед повторной попыткой монтирования. Однако вы не говорите, почему вы хотите это сделать :-). Вероятно, вы хотите запустить только первые три команды выше :-). Затем вы можете продолжать использовать файловую систему /procкак обычно.


Вам не разрешено запускать команды, которые вы пробовали (в Linux ). Причина в том, что после удаления каталога вам не разрешено использовать его в качестве каталога. Когда вы пытаетесь использовать удаленный каталог, Linux возвращает код ошибки ENOENT. Описание этого кода ошибки: «Нет такого файла или каталога».

Технически код ошибки сбивает с толку, потому что технически каталог все еще существует. Но он подходит лучше, чем любой другой код ошибки :-).

# mkdir dir
# cd dir
# rmdir../dir
# mkdir subdir
mkdir: cannot create directory ‘subdir’: No such file or directory

Точно так же вам не разрешено монтировать файловую систему поверх удаленного каталога.

# mount --bind /proc.
mount:.: mount(2) system call failed: No such file or directory.

Я говорю, что каталог технически все еще существует, потому что у него все еще есть номер инода (, и в иноде все еще хранится отметка времени, режим разрешений и т. д.):

# ls -l -i -d.
5521426 drwxr-xr-x. 0 root root 0 Oct 18 13:09.
# chmod a-x.
# ls -l -d.
drw-r--r--. 0 root root 0 Oct 18 13:09.

Ваша команда mountне напечатала общее описание кода ошибки :«Нет такого файла или каталога». Программа mountпытается угадать, что именно могло вызвать код ошибки. К сожалению, это означает, что иногда он ошибается :-). Проблем с "проком специального устройства" не было. Проблема была в точке монтирования /proc.

1
27.01.2020, 22:08

Теги

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