updatedb&Locateコマンドの問題-外付けハードドライブのファイルは再起動後にインデックス化されなくなりました


20

再起動後、外付けハードドライブのファイルのインデックスが作成されなくなりました。再マウントしてから実行する必要があります

# updatedb

各再起動後。問題はupdatedbです私の外付けハードドライブのために数分かかります。再起動後に外部のインデックスを保持して、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

1
設定ファイルを提供し、マウントオプション下さい:cat /etc/updatedb.confmounton_ac_power; echo $?
アレンジ

約8時間Linuxマシンにアクセスできなくなります
user784637

アレンジ、答えを仕様で更新しました。ご協力ありがとう
ござい

<将来への注意>ここで、一般的に何updatedbが行われているかを把握する方法を示します。(1。)およびで実行updatedbします。(2.)テキストを見て、インデックス付けされているものとされていないものを確認します->を調整します。私は私が必要なく、スキップされたことをファイルに対して日間。たとえば、次のように変更しました:(1.)(2.)remove from (3.)remove from--verbose--debug-pruning/etc/updatedb.confgrep/etc/updatedb.confPRUNE_BIND_MOUNTS = "no"nfs nfs4 nfsd autofsPRUNEFS/netPRUNEPATHS
Trevor Boyd Smith

回答:


35

外部ストレージのファイルは、外部ストレージが通常マウントされるの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をユーザーとして設定できます。ユーザーcronjobをセットアップするのにsudo権限は必要ありません。

次のコマンドは、データベースを照会します。

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、バックグラウンドでのregularyを実行しているあなたは、外部ハードディスクからファイルが現在インデックス化されているかどうかを確認することはできません。

さらに:/mediaから削除するとPRUNEPATHS、この動作はupdatedbデータベースの更新中にマウントした他の外部ストレージにも適用されます。


2
さらに、このエイリアスを~/.bashrcファイルに追加できますalias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
。– rubo77

あなたとOPの両方に+1。ただし、個別の外部DBコマンドではなく、WSL 用、WSL + Linux共有スクリプトとドキュメント用、およびデュアルブートUbuntu 16.04用にlocate-external3つのデータベースを1つに追加することを検討しています。つまり、同じロケートコマンドライン上の3つのデータベースすべて(もちろんエイリアスを使用)。しかし、始める前に、それが機能するかどうかを知るのは良いことです。それについてあなたの考えを得ることができますか?--database /mnt/c...--dataabase /mnt/e...--database /var/lib/mlocate/mlocate.db
WinEunuuchs2Unix

/mediaから削除するという議論に同意しませんPRUNEPATHS。はい、それはあなたが言及した問題を持っていますが、それを完全に除外することはさらに悪いです-あなたはそれらのドライブ上のファイルを決して見つけません。調理中に火傷しないように指を切断するようなものです(暗黙のうちに、他の明らかな解決策がない限り)。
Sridhar Sarnobat

2

updatedb.conf持っ/mediaていPRUNEPATHSます。外部ドライブがそこにマウントされているように見えるため、削除する必要があります。


2

これらはレスマナの答えに追加されるさらなる装飾です

[1]わずかな装飾:-iを追加して、検索されたクエリの大文字と小文字が問題にならないようにすることをお勧めします:.bashrcに追加するには>>

エイリアスLocate-external = 'locate -d〜/ .externalharddisk.db:-i '

[2] 両方のデータベース更新に関して。メインHDにあるものと外部にある新しいもの。.bashrcにもう1つのエントリを追加する価値があるでしょう

エイリアス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を入力することです。


見つけ、その後、更新を配列決定し、ため1
LMSingh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.