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