Файлы с моего внешнего жесткого диска больше не индексируются после перезагрузки. Я должен перемонтировать, а затем запустить
# 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
command-line
updatedb
locate
user784637
источник
источник
cat /etc/updatedb.conf
,mount
,on_ac_power; echo $?
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
Ответы:
Файлы с вашего внешнего жесткого диска не индексируются, поскольку
updatedb
настроены так, чтобы не индексировать что-либо в соответствии с тем/media
, где обычно монтируется внешнее хранилище. Эта конфигурация установлена в файле/etc/updatedb.conf
. Конкретно запись/media
вPRUNEPATHS
строке.Некоторые идеи, как вы можете сделать,
updatedb
чтобы проиндексировать ваш внешний диск:1. Установите внешний накопитель
/mnt
.Если ваш внешний жесткий диск должен быть смонтирован постоянно, я предлагаю настроить его так, чтобы он был смонтирован под,
/mnt
а не под/media
. Обычно это можно сделать путем редактирования/etc/fstab
. Ищите «fstab», чтобы узнать об этом. Вам понадобятся права sudo для редактирования/etc/fstab
.2. Создайте выделенную базу данных для внешнего жесткого диска и выполните запрос по требованию.
Следующая команда создаст выделенную базу данных:
Это создаст базу данных в скрытом файле
.externalharddisk.db
в вашем доме. Вам не нужноsudo
для этой команды. Выполните ту же команду еще раз, чтобы сохранить базу данных обновленной. Осторожно: если вы запустите эту команду, когда внешний жесткий диск не смонтирован, тоupdatedb
подумаете, что файлы удалены, и очистите базу данных.Вы можете настроить скрипт для автоматизации этой задачи. Ищите «cronjob», чтобы узнать, как это сделать. Примечание: вы можете настроить пользователя cronjob как пользователь. Вам не нужны права sudo для настройки пользовательского cronjob.
Следующая команда запросит базу данных:
Вы также можете запросить выделенную базу данных и базу данных по умолчанию одновременно:
Двоеточие в конце, за которым ничего не стоит, также означает поиск в базе данных по умолчанию.
Вы можете сделать псевдоним для более легкого использования. Вставьте следующую строку в ваш
.bashrc
:Теперь вы можете использовать
locate
для поиска только базу данных по умолчанию, аlocate-external
также для поиска на вашем внешнем жестком диске.3. Удалить
/media
изPRUNEPATHS
Примечание: я не рекомендую это ! Это из-за способа
updatedb
работы. Еслиupdatedb
выполняется, когда внешний жесткий диск удален, то все записи, указывающие на внешний жесткий диск, будут удалены из базы данных. Еслиupdatedb
выполняется, когда подключен внешний жесткий диск, записи, указывающие на внешний жесткий диск, будут добавлены снова. Такupdatedb
как работает в фоновом режиме, вы никогда не можете быть уверены, что файлы с внешнего жесткого диска в данный момент проиндексированы или нет.Более того: если вы удаляете
/media
изPRUNEPATHS
, это поведение также будет применяться к любому другому внешнему хранилищу, которое вы случайно подключили во времяupdatedb
обновления базы данных.источник
~/.bashrc
файл:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
locate-external
Е. Я рассматриваю возможность добавления трех баз данных в одну--database /mnt/c...
для WSL,--dataabase /mnt/e...
для общих сценариев и документов WSL + Linux и--database /var/lib/mlocate/mlocate.db
для Ubuntu 16.04 с двойной загрузкой. т.е. все три базы данных находятся в одной командной строке (с псевдонимом, конечно). Но прежде чем начать, было бы неплохо узнать, сработает ли это. Могу ли я получить ваши мысли по этому поводу?/media
изPRUNEPATHS
. Хотя да, у вас есть проблема, о которой вы упомянули, исключить ее еще хуже - вы НИКОГДА не найдете файлы на этих дисках. Это похоже на ампутацию пальцев, чтобы они не обгорели во время приготовления пищи (если не имеется другого очевидного решения, которого я не вижу).У
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
чтобы все это исправить, как только новая строка будет сохранена в .bashrcPS²: и, конечно же,
externalharddisk
во всех приведенных выше строках будет заменено имя вашего внешнего HD-имени, т.е. / media / YOURHDNAME* PS³, и вы, конечно, можете объединить обновления и найти в вашем .bashrc
псевдоним LO = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk; найдите -d ~ / .externalharddisk.db: -i '
так что теперь все, что вам нужно для обновления и поиска, - это ввести LO «с последующими терминами, которые вы ищете»
источник