Вопрос или проблема
Я хотел перенести /usr
на Raspberry (Bullseye Linux) на подключенный SSD, как я уже успешно сделал с /home
.
Я скопировал /usr
с помощью rsync на /media/ssd
, затем переименовал /usr
в /usr-bak
, чтобы иметь резервную копию на случай, если что-то пойдет не так.
Теперь я осознаю, что больше ничего не могу сделать. Все бинарные файлы больше не исполняемы.
Они должны сейчас находиться в /usr-bak/bin
, так как я только переименовал /usr
, а не удалил его.
Я вижу, что они все еще там, набрав /usr-bak/bin/ <TAB><TAB>
, что автозаполняет все, что может понадобиться.
К сожалению, я не могу запустить ls и что-либо другое, особенно mv
, чтобы вернуть название обратно и подумать о другом, более разумном способе продолжения.
Вызов /usr-bak/bin/mv
говорит мне: Нет такого файла или каталога
То же самое и для . /usr-bak/bin/mv
, входя в bin и просто вызывая . mv
и все, что пришло мне в голову.
Я также не могу запустить ничего из /media/sdd/usr/bin
, где опять же все существует, но не исполняется.
Что здесь происходит? Потеряли ли бинарные файлы свои исполняемые права из-за изменения имени?
Что я мог бы попробовать перед тем, как вынести Raspberry оттуда и подключить его к монитору и клавиатуре?
Кстати, я видел много подобных вопросов здесь, но ответы на них не работают для меня, так как они основываются на том, чтобы как-то выполнить что-то полезное. busybox, chmod и прочее… все это теперь недоступно для меня.
Например, смотрите После случайного переименования /usr, как мне вернуть его обратно?, как упоминалось в комментариях. Я нашел это и попробовал, но у меня нет sudo в $PATH, я также не могу запустить busybox или su или что-либо еще.
Вот что я получаю
user@#pi:/ $ /usr-bak/bin/busybox
-bash: /usr-bak/bin/busybox: Нет такого файла или каталога
user@pi:/ $ . /usr-bak/bin/busybox
-bash: .: /usr-bak/bin/busybox: невозможно выполнить бинарный файл
Бинарные файлы — это не просто бинарные файлы. Они обычно создаются с использованием и зависят от общих библиотек, которые обычно находятся в /usr/lib64
(или /usr/lib/x86_64-linux-gnu/
на производных от Debian) на 2024 год.
Даже в этом сценарии дистрибутивы собирают busybox
статически, и если он установлен, вы могли бы запустить и использовать его, чтобы вернуть ваши изменения.
Если busybox
недоступен, вы можете загрузиться с любого Live-дистрибутива или со своего собственного дистрибутива, если у него есть live-режим.
Ответ или решение
Ваше описание проблемы указывает на то, что при переименовании каталога /usr
в /usr-bak
вы потеряли доступ к исполняемым файлам и другим важным утилитам, так как перемещение может повлиять на переменные среды, особенно на PATH
, где хранятся пути к исполняемым приложениям.
Что произошло?
Когда вы переименовали каталог /usr
, системы Unix/Linux сразу теряют доступ к большому количеству утилит и библиотек, находящихся в этом каталоге. Это означает, что shell не может найти команды, такие как ls
, mv
, chmod
, и другие. Вы также можете столкнуться с проблемами из-за того, что многие бинарные файлы зависят от динамических библиотек, находящихся в /usr/lib
или /usr/lib64
.
Возможные решения
-
Перемещение к каталогу
/media/ssd/usr/bin
:- Для начала, попробуйте выполнить команду для переключения на другой каталог, где вы знаете, что есть утилиты. Если вы можете получить доступ к
/media/ssd/usr/bin
, попробуйте выполнитьcd /media/ssd/usr/bin
и затем запустите команды оттуда. - Если вы хотите вернуть все как было, попробуйте (
/media/ssd/usr/bin/mv /usr-bak /usr
).
- Для начала, попробуйте выполнить команду для переключения на другой каталог, где вы знаете, что есть утилиты. Если вы можете получить доступ к
-
Поиск статики
busybox
:- Если на вашей системе установлен
busybox
, он может запускаться как статическая бинарная программа, и это даст возможность выполнять простые команды. Попробуйте выполнить:/usr-bak/bin/busybox ls
- Если
busybox
не запускается, возможно, он не был собран статически.
- Если на вашей системе установлен
-
Использование режима восстановления:
- Если у вас есть доступ к HDMI, подключите Raspberry Pi к монитору и клавиатуре.
- Вопреки вашим ожиданиям, вы сможете загрузиться в режиме восстановления (recovery mode) и попробовать выполнить те же команды, которые вы пытались использовать из терминала.
-
Загрузочное Live-окружение:
- Если ни одно из предыдущих решений не сработало, рекомендуется использовать загрузочное Live-дистрибутив. Например, вы можете использовать Raspberry Pi OS или любой другой Linux-дистрибутив.
- Подключите SD-карту в рабочий компьютер, и загрузившись с Live USB, вы сможете монтировать файловую систему и вручную вернуть все на свои места.
Дополнительные шаги по предотвращению подобных ошибок:
-
Создание резервных копий:
- Прежде чем вносить изменения в важные системные каталоги, всегда создавайте резервные копии.
-
Тестирование на виртуальной машине:
- Если вы планируете проводить эксперименты с файловой системой, рассмотрите возможность использования виртуальной машины или контейнера, чтобы избежать проблем на реальных системах.
-
Чтение документации и подготовка к восстановлению.
- Ознакомьтесь с документацией по вашей системе, чтобы лучше понимать, как различные компоненты работают вместе, и как восстанавливать информацию в случае ошибок.
Следуя предложенным шагам, вы сможете восстановить функциональность вашей системы. Удачи!