updatedb & locate komut sorunu - Harici sabit diskteki dosyalar yeniden başlatıldıktan sonra artık dizine eklenmiyor


20

Harici sabit diskimdeki dosyalar yeniden başlatıldıktan sonra artık endekslenmiyor. Yeniden monte etmem ve sonra koşmam gerekiyor

# updatedb

Her yeniden başlatmadan sonra. Sorun güncellendi, harici sabit disklerim için birkaç dakika sürüyor. Locate komutunun dışlarımda arama yapabilmesi için yeniden başlattıktan sonra dışlarım için endekslemeyi tutabileceğim bir yol var mı?

EDIT: İstek Başına burada benim özellikleridir:

$ 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
Yapılandırma dosyaları sağlamak ve montaj seçenekleri: Lütfen cat /etc/updatedb.conf, mount,on_ac_power; echo $?
düzenlemek

yapacak, bir linux makinesine yaklaşık 8 saat daha
erişemeyecektir

Düzenle, cevabımı özellikleriyle güncelledim, yardımınız için teşekkürler =)
user784637

<Gelecek için not> İşte GENEL olarak ne updatedbyaptığını anlamaya nasıl : (1.) ve updatedbile çalıştırın . (2.) Neyin endekslendiğini ve endekslenmediğini görmek için metne bakın -> ayarınızı yapın . Ben ihtiyacım ama atlanan ediliyordu dosyalar için d. Mesela ben değiştirmek zorunda (1.): ile (2.) remove den (3.) kaldırma den--verbose--debug-pruning/etc/updatedb.confgrep/etc/updatedb.confPRUNE_BIND_MOUNTS = "no"nfs nfs4 nfsd autofsPRUNEFS/netPRUNEPATHS
Trevor Boyd Smith

Yanıtlar:


35

Harici sabit diskinizdeki dosyalar dizine alınmaz updatedb, çünkü /mediaharici depolamanın genellikle monte edildiği yerin altındaki hiçbir şeyi dizinlemeyecek şekilde yapılandırılmıştır . Bu yapılandırma dosyada ayarlanmıştır /etc/updatedb.conf. Özellikle giriş /mediabölgesi PRUNEPATHShattı.

updatedbHarici sürücünüzü endekslemek için nasıl yapabileceğinize dair bazı fikirler :

1. Harici sürücüyü yerine yerleştirin /mnt.

Harici harddisk olması gerekiyordu Eğer kalıcı olarak monte sonra ben bunun altına monte edilmiş şekilde yapılandırmak için önermek /mntyerine altında /media. Bu genellikle düzenleyerek yapılabilir /etc/fstab. Bunun hakkında bilgi edinmek için "fstab" aratın. Düzenlemek için sudo haklarına ihtiyacınız olacak /etc/fstab.

2. Harici sabit diskiniz için özel bir veritabanı oluşturun ve istek üzerine sorgulayın.

Aşağıdaki komut özel bir veritabanı oluşturacaktır:

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

Bu, veritabanını .externalharddisk.dbevinizdeki gizli dosyada oluşturacaktır . Bu sudokomut için gerek yok . Veritabanını güncel tutmak için aynı komutu tekrar uygulayın. Dikkatli: Eğer harici sabit disk takılı değilken bu komutu çalıştırırsanız, o updatedbzaman dosyaların silindiğini ve veritabanını boşaltacağını düşüneceksiniz.

Bu görevi otomatikleştirmek için bir komut dosyası ayarlayabilirsiniz. Bunun nasıl yapılacağını öğrenmek için "cronjob" arayın. Not: Bir kullanıcı kronesini kullanıcı olarak ayarlayabilirsiniz. Bir kullanıcı cronjob kurmak için sudo haklarına ihtiyacınız yoktur.

Aşağıdaki komut veritabanını sorgulayacaktır:

locate -d ~/.externalharddisk.db searchterm

Ayrılmış veritabanını ve varsayılan veritabanını aynı anda sorgulayabilirsiniz:

locate -d ~/.externalharddisk.db: searchterm

Sonunda iki nokta üst üste, ardından hiçbir şey varsayılan veritabanında arama yapmak anlamına gelmez.

Kolay kullanım için bir takma ad yapabilirsiniz. Aşağıdaki çizgiyi içine yerleştirin .bashrc:

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

Şimdi locateyalnızca varsayılan veritabanını locate-externalaramak ve ayrıca harici sabit diskinizde arama yapmak için kullanabilirsiniz.

3. /mediadan çıkarınPRUNEPATHS

Not: Bunu önermiyorum ! Bu updatedbişlerin yolundan kaynaklanıyor . Eğer updatedbishal harici harddisk sonra harici bir sabit disk işaret eden tüm girdileri kaldırılır iken veritabanından kaldırılır. Eğer updatedbishal harici harddisk sonra harici bir sabit disk işaret girdileri bağlıyken tekrar eklenecektir. Yana updatedbarka planda DÜZENLİ çalıştıran harici sabit diskten dosyaları şu anda endeksli olsun ya da olmasın asla emin olamazsınız.

Dahası: Kaldırmak eğer /mediagelen PRUNEPATHS, bu davranış da iken monte etmiş olur diğer herhangi bir harici depolama için geçerli olacak updatedbveritabanını güncelliyor.


2
Ayrıca bu takma adı ~/.bashrcdosyanıza ekleyebilirsiniz :alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77

Hem sana hem de OP'e +1. Ancak, ayrı bir harici DB komutu yerine locate-external, örneğin , --database /mnt/c...WSL, --dataabase /mnt/e...WSL + Linux paylaşılan komut dosyaları ve belgeleri ve --database /var/lib/mlocate/mlocate.dbçift ​​önyüklemeli Ubuntu 16.04 için birine üç veritabanı eklemeyi düşünüyorum. yani Aynı üç komut satırı da aynı komut satırında bulunur (takma adla). Ama başlamadan önce çalışıp çalışmayacağını bilmek güzel olurdu. Bununla ilgili düşüncelerinizi alabilir miyim?
WinEunuuchs2Unix 11:17

Ben kaldırma argümanı kabul etmiyorsanız /mediadan PRUNEPATHS. Evet, belirttiğiniz bir sorun olsa da, tamamen dışlanması daha da kötü - bu sürücülerdeki dosyaları ASLA bulamazsınız. Parmaklarınızı kestirmek gibidir, böylece pişirme sırasında yanmazlar (göremediğim başka bir açık çözüm olmadığı sürece).
Sridhar Sarnobat

2

In updatedb.confsize sahip /mediayılında PRUNEPATHS. Harici sürücüleriniz oraya monte edilmiş gibi göründüğü için çıkarmalısınız.


2

Bunlar Lesmana'nın cevabına eklenecek başka süslemeler.

[1] hafif bir süsleme: aranan sorgunun durumundan emin olmak için -i eklemeyi önerebilirim : bu yüzden .bashrc'ye eklemek için >>

takma ad bulma harici = 'bulun - -d ~ / .externalharddisk.db: -i '

[2] Her iki veritabanının güncellenmesiyle ilgili olarak ; ana HD'deki ve haricideki yeni olan; Muhtemelen .bashrc'ye bir giriş daha eklemeye değer.

alias updateALL = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk'

ve sonra updateALLher iki veritabanını bir kerede güncellemek için terminalde basitçe çalıştırmak

Not: tabii ki . ~/.bashrc.bashrc PS²'ye yeni bir satır kaydedildiğinde hepsini tamamlamaya çalışmayı unutmayın
: tabii ki externalharddiskyukarıdaki tüm satırlarda harici HD adınızla / tabiki / media / YOURHDNAME

* PS³ ve tabii ki hem güncellemeyi hem de .bashrc’de yerini bulabilirsin

takma ad LO = 'sudo updatedb && updatedb -l0 -o ~ / .externalharddisk.db -U / media / externalharddisk; bulun -d ~ / .externalharddisk.db: -i '

bu yüzden şimdi güncellemeniz ve arama yapmanız için tek yapmanız gereken 'girdiğiniz terimlerden sonra'


Sıralama sıralaması için +1 ve ardından bulun
LMSingh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.