web-dev-qa-db-ja.com

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

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

# 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
20
user784637

updatedbは外部ストレージが通常マウントされる/mediaの下に何もインデックスしないように設定されているため、外部ハードディスクのファイルはインデックスされません。この構成は、ファイル/etc/updatedb.confで設定されます。具体的には、PRUNEPATHS行の/mediaエントリ。

updatedbを作成して外付けドライブのインデックスを作成する方法のアイデア:

1. /mntの下に外部ドライブをマウントします。

外付けハードディスクが永続的にマウントされるである場合、/mntの下ではなく/mediaの下にマウントされるように構成することをお勧めします。これは通常、/etc/fstabを編集することで実行できます。 「fstab」を検索して、それについて学びます。 /etc/fstabを編集するには、Sudo権限が必要です。

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. PRUNEPATHSから/mediaを削除します

注:これはお勧めしません!これは、updatedbの動作方法によるものです。外部ハードディスクが削除されているときにupdatedbが実行されると、外部ハードディスクを指すすべてのエントリがデータベースから削除されます。外部ハードディスクが接続されているときにupdatedbが実行されると、外部ハードディスクを指すエントリが再び追加されます。 updatedbはバックグラウンドで定期的に実行されているため、外部ハードディスクのファイルに現在インデックスが作成されているかどうかを確認することはできません。

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

35
lesmana

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

2
taneli

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

[1]わずかな装飾:-iを検索されたクエリのケースが問題ではなくなったことを確認する:を追加することをお勧めします。

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

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

エイリアス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を入力することです(「検索語が続く」)

2
shantiq