WSL 환경 + mlocate(locate) 도구의 /mnt 디렉터리 검색 문제
mlocate 도구를 설치하면,
$ sudo apt install mlocate
Reading package lists... Done
...[생략]...
Initializing mlocate database; this may take some time...
Progress: [ 60%] [################################################################............................................]
WSL 환경의 경우 위와 같이 일정 수준의 진도에서 한참 동안 멈춰있을 것입니다. 왜냐하면, 윈도우의 C, D 드라이브 등에 매핑된 /mnt 디렉터리로 인해 인덱싱 시간이 오래 걸리기 때문인데요, 게다가 그 이후 검색에서도 원치 않게 /mnt 디렉터리를 포함한 결과를 출력하는 문제가 있습니다.
따라서, (
find 명령에서 /mnt를 제외한 것처럼) mlocate에게
/mnt를 제외해야 하는데요, 이에 대해서는 /etc/updatedb.conf 파일을 직접 편집하면 됩니다.
$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
£ PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS afs autofs binfmt_misc ceph cgroup cgroup2 cifs coda configfs curlftpfs debugfs devfs devpts devtmpfs ecryptfs ftpfs fuse.ceph fuse.cryfs fuse.encfs fuse.glusterfs fuse.gvfsd-fuse fuse.mfs fuse.rozofs fuse.sshfs fusectl fusesmb hugetlbfs iso9660 lustre lustre_lite mfs mqueue ncpfs nfs nfs4 ocfs ocfs2 proc pstore rpc_pipefs securityfs shfs smbfs sysfs tmpfs tracefs udev udf usbfs"
이 파일에서 PRUNEPATHS에 다음과 같이 /mnt를 추가해 줍니다.
PRUNEPATHS="/mnt /tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
이후 변경 사항을 반영하기 위해
updatedb를 관리자 권한으로 재실행합니다.
$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'
$ sudo updatedb
그런데, 달리 생각해 보면 locate의 /mnt 검색을 그냥 또 다른 윈도우 명령어 Shell의 기능처럼 받아들일 수도 있습니다. 인덱싱 크기도,
// /mnt 포함했을 때,
$ ls -l /var/lib/mlocate/mlocate.db
-rw-r----- 1 root mlocate 187268412 Dec 27 14:00 /var/lib/mlocate/mlocate.db
// /mnt 제외했을 때,
$ ls -l /var/lib/mlocate/mlocate.db
-rw-r----- 1 root mlocate 5681370 Dec 26 19:27 /var/lib/mlocate/mlocate.db
미포함했을 때의 5MB에 비해 180MB 정도로 크긴 하지만 그래도 뭐 저 정도면 요즘 시대의 외장 스토리지에서는 크게 부담스러운 수준은 아닙니다.
참고로, updatedb 명령의 인자를 보면 --add-prunepaths 옵션이 있는데요,
$ sudo updatedb --add-prunepaths "/mnt"
직관적으로는 저 명령어가 /etc/updatedb.conf에 /mnt 예외를 추가할 것처럼 느껴지겠지만, 실제로 하는 일은 /var/lib/mlocate/mlocate.db 인덱스 파일에서 /mnt 경로에 대한 인덱싱을 제거하는 역할만 합니다. (따라서 conf 파일의 변경이 없으므로 이런 경우에는 "sudo udpatedb" 명령어를 내려 다시 인덱싱을 하면 add-prunepaths 옵션 전의 상황으로 바뀝니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]