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

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

# 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

3 ответа

Решение

Файлы с вашего внешнего жесткого диска не индексируются, потому что 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 обновляет базу данных.

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

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

[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 "с последующими поисковыми терминами"

Другие вопросы по тегам