Ошибка команды updatedb & locate - файлы с внешнего жесткого диска больше не индексируются после перезагрузки


20

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

# updatedb

после каждой перезагрузки. Проблема в обновлении b занимает несколько минут для моих внешних жестких дисков. Можно ли как-нибудь сохранить индексирование для моих внешних устройств после перезагрузки, чтобы команда locate могла выполнять поиск среди моих внешних устройств?

РЕДАКТИРОВАТЬ: По запросу вот мои спецификации:

$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/me/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=me)
/dev/sdb1 on /media/me type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdd1 on /media/Little Boy type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sde1 on /media/Fat Man type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

# on_ac_power; echo $?
255

1
Просьба предоставить конфигурационные файлы и параметры монтирования: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
организовать

будет делать, не будет иметь доступ к машине Linux в течение еще 8 часов
user784637

Согласитесь, я обновил свой ответ моими характеристиками, спасибо за вашу помощь =)
user784637

<примечание к будущему> Вот как ОБЩЕЕ выяснить, что updatedbделает: (1.) Запустите updatedbс помощью --verboseи --debug-pruning. (2.) Посмотрите на текст, чтобы увидеть, что индексируется, а не индексируется -> настройте свой /etc/updatedb.conf. Я grepсделал для файлов, которые мне нужны, но были пропущены. Например, я должен был изменить /etc/updatedb.conf: (1.) PRUNE_BIND_MOUNTS = "no"(2.) удалить nfs nfs4 nfsd autofsиз PRUNEFS(3.) удалить /netизPRUNEPATHS
Тревор Бойд Смит

Ответы:


35

Файлы с вашего внешнего жесткого диска не индексируются, поскольку updatedbнастроены так, чтобы не индексировать что-либо в соответствии с тем /media, где обычно монтируется внешнее хранилище. Эта конфигурация установлена ​​в файле /etc/updatedb.conf. Конкретно запись /mediaв PRUNEPATHSстроке.

Некоторые идеи, как вы можете сделать, updatedbчтобы проиндексировать ваш внешний диск:

1. Установите внешний накопитель /mnt.

Если ваш внешний жесткий диск должен быть смонтирован постоянно, я предлагаю настроить его так, чтобы он был смонтирован под, /mntа не под /media. Обычно это можно сделать путем редактирования /etc/fstab. Ищите «fstab», чтобы узнать об этом. Вам понадобятся права sudo для редактирования /etc/fstab.

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

Следующая команда создаст выделенную базу данных:

updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk

Это создаст базу данных в скрытом файле .externalharddisk.dbв вашем доме. Вам не нужно sudoдля этой команды. Выполните ту же команду еще раз, чтобы сохранить базу данных обновленной. Осторожно: если вы запустите эту команду, когда внешний жесткий диск не смонтирован, то updatedbподумаете, что файлы удалены, и очистите базу данных.

Вы можете настроить скрипт для автоматизации этой задачи. Ищите «cronjob», чтобы узнать, как это сделать. Примечание: вы можете настроить пользователя cronjob как пользователь. Вам не нужны права sudo для настройки пользовательского cronjob.

Следующая команда запросит базу данных:

locate -d ~/.externalharddisk.db searchterm

Вы также можете запросить выделенную базу данных и базу данных по умолчанию одновременно:

locate -d ~/.externalharddisk.db: searchterm

Двоеточие в конце, за которым ничего не стоит, также означает поиск в базе данных по умолчанию.

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

alias locate-external='locate -d ~/.externalharddisk.db:'

Теперь вы можете использовать locateдля поиска только базу данных по умолчанию, а locate-externalтакже для поиска на вашем внешнем жестком диске.

3. Удалить /mediaизPRUNEPATHS

Примечание: я не рекомендую это ! Это из-за способа updatedbработы. Если updatedbвыполняется, когда внешний жесткий диск удален, то все записи, указывающие на внешний жесткий диск, будут удалены из базы данных. Если updatedbвыполняется, когда подключен внешний жесткий диск, записи, указывающие на внешний жесткий диск, будут добавлены снова. Так updatedbкак работает в фоновом режиме, вы никогда не можете быть уверены, что файлы с внешнего жесткого диска в данный момент проиндексированы или нет.

Более того: если вы удаляете /mediaиз PRUNEPATHS, это поведение также будет применяться к любому другому внешнему хранилищу, которое вы случайно подключили во время updatedbобновления базы данных.


2
Вы можете дополнительно добавить этот псевдоним в свой ~/.bashrcфайл:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77

+1 и вам, и ОП. Однако вместо отдельной команды внешней БД, т. locate-externalЕ. Я рассматриваю возможность добавления трех баз данных в одну --database /mnt/c...для WSL, --dataabase /mnt/e...для общих сценариев и документов WSL + Linux и --database /var/lib/mlocate/mlocate.dbдля Ubuntu 16.04 с двойной загрузкой. т.е. все три базы данных находятся в одной командной строке (с псевдонимом, конечно). Но прежде чем начать, было бы неплохо узнать, сработает ли это. Могу ли я получить ваши мысли по этому поводу?
WinEunuuchs2Unix

Я не согласен с аргументом удаления /mediaиз PRUNEPATHS. Хотя да, у вас есть проблема, о которой вы упомянули, исключить ее еще хуже - вы НИКОГДА не найдете файлы на этих дисках. Это похоже на ампутацию пальцев, чтобы они не обгорели во время приготовления пищи (если не имеется другого очевидного решения, которого я не вижу).
Шридхар Сарнобат

2

У updatedb.confвас есть /mediaв PRUNEPATHS. Вы должны удалить его, так как ваши внешние диски, кажется, там смонтированы.


2

Это дополнительные украшения, которые будут добавлены к ответу Лесманы

[1] небольшое приукрашивание: могу ли я предложить добавить -i, чтобы убедиться, что регистр поискового запроса больше не является проблемой : так что добавьте в .bashrc >>

псевдоним locate-external = 'locate -d ~ / .externalharddisk.db: -i '

[2] Что касается обновления обеих баз данных ; один в основном HD и новый во внешнем; вероятно, стоит добавить еще одну запись в .bashrc

псевдоним updateALL = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk'

а затем просто запустить updateALLв терминале, чтобы обновить обе базы данных одновременно

PS: конечно, не забудьте запустить, . ~/.bashrcчтобы все это исправить, как только новая строка будет сохранена в .bashrc
PS²: и, конечно же, externalharddiskво всех приведенных выше строках будет заменено имя вашего внешнего HD-имени, т.е. / media / YOURHDNAME

* PS³, и вы, конечно, можете объединить обновления и найти в вашем .bashrc

псевдоним LO = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk; найдите -d ~ / .externalharddisk.db: -i '

так что теперь все, что вам нужно для обновления и поиска, - это ввести LO «с последующими терминами, которые вы ищете»


+1 для обновления последовательности и затем найдите
LMSingh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.