оновлена ​​команда updateb & locate - Файли із зовнішнього жорсткого диска більше не індексуються після перезавантаження


20

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

# updatedb

після кожного перезавантаження. Проблема оновлюєтьсяb займає декілька хвилин для моїх зовнішніх жорстких дисків. Чи є спосіб я зберегти індексацію для своїх зовнішніх користувачів після перезавантаження, щоб команда locate могла шукати мої зовнішні файли?

EDIT: За запитом, ось мої характеристики:

$ 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. Встановіть зовнішній привід unter /mnt.

Якщо ваш зовнішній жорсткий диск повинен бути встановлений постійно, я пропоную налаштувати його так, щоб він монтувався під, /mntа не під /media. Зазвичай це можна зробити за допомогою редагування /etc/fstab. Шукайте "fstab", щоб дізнатися про це. Для редагування вам знадобляться права судо /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 і вам, і OP. Однак замість окремої зовнішньої команди БД, тобто 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 = 'знайти -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 т / медіа / 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.