Вы не должны пытаться это сделать, по ряду причин (, подробно описанных в других ответах ):/foo/oldPath
, может быть точкой монтирования, или может присутствовать оверлейная файловая система, препятствующая перемещению файлов. Вы даже можете столкнуться с монтированием привязки для отдельных файлов, что также вызовет проблемы при переименовании файлов.
Вместо того, чтобы пытаться заранее определить, можно ли переименовать файлы, следует попытаться переименовать их и устранить ошибки.rename
вернет -1, если произойдет ошибка, а errno
будет установлено на EXDEV
, если переименование невозможно из-за проблем с перекрестным -монтированием. Затем вы можете действовать другим способом (скопировать и удалить ).
В общем случае, чтобы определить, находятся ли два объекта файловой системы в одной и той же файловой системе, следует запустить для нихstat
и посмотреть идентификатор устройства (в поле st_dev
вstruct stat
). Два объекта файловой системы в одной и той же файловой системе будут иметь одинаковый идентификатор устройства.
Это иногда происходит в системах, которые неправильно сохраняют переменные EFI. (В частности, я часто видел это с CentOS на VirtualBox. )Я использую обходной путьcp redhat/grubx64.efi BOOT/BOOTX64.EFI
(после создания BOOT/
, если он еще не существует ). Если вы не используете одну загрузочную систему -, которую вы всегда хотите загружать в GRUB, вам придется правильно исправить ее с помощью efibootmgr
, но обратите внимание, что если ваш EFI не работает, это исправление не будет последний либо.
Это немного сложный процесс, и я боюсь, что не смогу сейчас подробно описать все шаги. Если потребуется, я с удовольствием сделаю это позже. В целом, необходимо выполнить следующие шаги:
Войдите в режим восстановления с помощью загрузочного диска RHEL.
Смонтируйте разделы вашей системы root
, boot
и EFI
во временное дерево каталогов, такое как /tmp
, /tmp/boot
и /tmp/boot/efi
соответственно, а затем chroot
туда (, например chroot /tmp
).
Убедитесь, что вы подключены к Интернету. Если нет, подключитесь с помощью nmtui
или аналогичного инструмента.
Установите пакеты grub2-efi
и shim
[Ссылка ].
Восстановить grub
путем ввода grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
[Ссылки ].
Перезагрузите систему. Убедитесь, что RHEL или диск с разделом EFI выбран в качестве варианта загрузки в BIOS, а затем попробуйте загрузить свою ОС.
Это должно сработать.