Вопрос или проблема
Предположим, у меня смонтирована файловая система, которая индексируется с помощью updatedb.
sudo mount /dev/sdb1 /home/me/mp
sudo updatedb
locate /home/me/mp/folder/file
# -> /home/me/mp/folder/file
Затем, если я размонтирую файловую систему и буду искать файлы с помощью plocate, я смогу получить только пути к файлам и папкам в корне файловой системы, хотя все файлы фактически находятся в базе данных.
sudo umount /home/me/mp
locate /home/me/mp/folder/file
# -> <nothing>
Почему это происходит?
Могу ли я заставить plocate находить все файлы в базе данных, даже если файловая система не смонтирована?
Ответ или решение
Использование plocate для поиска файлов, недоступных в файловой системе
В данной статье мы рассмотрим, как работает система индексации файлов на Linux и как plocate, используя базу данных, предоставляет информацию о файлах, даже если они недоступны на смонтированной файловой системе.
Проблема
Когда вы монтируете файловую систему и запускаете команду updatedb
, все файлы на монтируемом разделе индексируются и добавляются в базу данных. Это позволяет использовать команды, такие как locate
или plocate
, для быстрого поиска файлов.
sudo mount /dev/sdb1 /home/me/mp
sudo updatedb
locate /home/me/mp/folder/file
# Результат: /home/me/mp/folder/file
Однако, после демонтажа файловой системы, когда вы выполняете ту же команду поиска файлов, plocate не возвращает результата:
sudo umount /home/me/mp
locate /home/me/mp/folder/file
# Результат: <ничего>
Причина
Такое поведение связано с тем, как работает plocate и его предшественники, такие как locate. Когда файловая система смонтирована, updatedb
индексация происходит и сохраняется в специальной базе данных. Однако если файловая система не смонтирована, plocate не может получить доступ к файлам и каталогам, расположенным на этом разделе, что делает невозможным их отображение в результатах поиска.
Это происходит по нескольким причинам:
-
Отсутствие монтирования: plocate опирается на монтированные файлы, чтобы вернуть их местоположение. Если файловая система не доступна, plocate не может получить к ним доступ.
-
Динамическая база данных: База данных
updatedb
включает только ссылки на файлы, находящиеся на активных монтированных системах в момент обновления.
Возможность поиска файлов в неактивной базе данных
Если вы хотите иметь возможность находить файлы, даже если файловая система не смонтирована, необходимо учитывать некоторые моменты:
-
Индексация: Убедитесь, что файловая система была индексирована до ее демонтажа. Если
updatedb
был запущен, а система не смонтирована, результаты не будут доступны. -
Поиск по базе данных вне монтирования: Важно понимать, что
plocate
илиlocate
не реализуют механизм поиска по индексированной информации, если файловая система в данный момент не доступна. Таким образом, пока вы не смонтируете систему обратно, вы не сможете получить информацию о файлах в этой системе. -
Использование альтернативных подходов: Если это критично для вас, рассмотрите возможность использования других инструментов для мониторинга или версионирования ваших файлов, таких как rsync, git или инструменты резервного копирования, которые могут сохранить состояние ваших файлов вне зависимости от статуса монтирования файловой системы.
Рекомендации
Для упрощения поиска файлов и их управления следуйте этим рекомендациям:
- Регулярная индексация: Запускайте
updatedb
регулярно, особенно перед демонтажем файловой системы. - Мониторинг состояния: Ведите ретроспективный мониторинг ваших монтированных файловых систем, чтобы всегда иметь актуальную информацию о данных.
- Альтернативные инструменты: Используйте системы контроля версий или инструменты резервного копирования для надежного хранения информации.
Заключение
Возможности plocate для поиска файлов ограничены условиями, при которых файловая система должна быть монтирована и доступна. Понимание этого аспекта поможет вам более эффективно использовать инструменты Linux для управления файлами. Если у вас есть необходимость в доступе к неактивным данным, рассмотрите другие подходы, гарантирующие доступность информации.