updatedb & locate 명령 문제-재부팅 후 외장 하드 드라이브의 파일이 더 이상 색인화되지 않습니다


20

재부팅 후 외부 하드 드라이브의 파일이 더 이상 색인화되지 않습니다. 다시 마운트 한 다음 실행해야합니다

# 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.conf, mount,on_ac_power; echo $?
준비

약 8 시간 동안 리눅스 시스템에 액세스 할 수 없습니다
user784637

나는 나의 스펙에 도움 =) 감사 내 대답을 업데이 트했습니다, 정렬
user784637

<미래를위한 메모> 일반적 updatedb으로 수행중인 작업을 파악하는 방법은 다음과 같습니다 . (1.) updatedbwith --verboseand --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"을 검색하십시오. 편집하려면 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백그라운드에서 규칙적으로 실행 되므로 외부 하드 디스크의 파일이 현재 색인화되어 있는지 여부를 확신 할 수 없습니다.

또한 /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 개의 데이터베이스를 하나에 추가하는 것을 고려 하고 있습니다. 즉, 같은로 케이트 명령 행에있는 세 데이터베이스 모두 (별칭으로). 그러나 시작하기 전에 그것이 작동하는지 아는 것이 좋을 것입니다. 그것에 대해 당신의 생각을 얻을 수 있습니까? --database /mnt/c...--dataabase /mnt/e...--database /var/lib/mlocate/mlocate.db
WinEunuuchs2Unix

나는 제거의 주장에 동의하지 않는다 /media에서 PRUNEPATHS. 예, 언급 한 문제가 있지만 완전히 제외하면 더 나빠집니다. 드라이브에서 파일을 찾지 못할 것입니다. 그것은 요리하는 동안 화상을 입지 않도록 손가락을 절단하는 것과 같습니다 (내가 보이지 않는 암시적인 다른 해결책이 없다면).
Sridhar Sarnobat

2

에서 updatedb.conf당신이 /media에서 PRUNEPATHS. 외장 드라이브가 마운트되어있는 것처럼 보이기 때문에 제거해야합니다.


2

이것들은 Lesmana의 답변에 추가 될 추가 꾸밈음입니다

[1] 약간의 꾸밈 : 검색된 쿼리의 사례가 더 이상 문제가되지 않도록 -i를 추가하는 것이 좋습니다 . .bashrc에 추가 >>

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

[2] 두 데이터베이스업데이트와 관련하여 ; 메인 HD에있는 것과 외부에있는 새로운 것; 아마도 .bashrc에 하나 이상의 항목을 추가 할 가치가 있습니다.

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

updateALL터미널에서 간단히 실행 하여 두 데이터베이스를 한 번에 업데이트

추신 : 물론 . ~/.bashrc새로운 줄이 .bashrc PS²에 저장되면 모든 것을 확고히하는 것을 잊지
마십시오. 물론 externalharddisk위의 모든 줄도 외부 HD 이름의 이름으로 바뀝니다. / media / YOURHDNAME

* PS³ 그리고 .bashrc에서 업데이트와 위치를 둘 다 혼동 할 수 있습니다.

alias 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.