updateb & xác định vấn đề lệnh - Các tệp từ ổ cứng ngoài không còn được lập chỉ mục sau khi khởi động lại


20

Các tệp từ ổ cứng ngoài của tôi không còn được lập chỉ mục sau khi khởi động lại. Tôi phải kể lại và sau đó chạy

# updatedb

sau mỗi lần khởi động lại. Vấn đề được cập nhật mất vài phút cho các ổ cứng ngoài của tôi. Có cách nào tôi có thể giữ lại lập chỉ mục cho các phần bên ngoài của mình sau khi tôi khởi động lại để lệnh định vị có thể tìm kiếm thông qua các phần bên ngoài của tôi không?

EDIT: Mỗi yêu cầu ở đây là thông số kỹ thuật của tôi:

$ 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
Vui lòng cung cấp các tập tin cấu hình và các tùy chọn gắn kết: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
bố trí

sẽ làm, sẽ không có quyền truy cập vào máy linux trong khoảng 8 giờ nữa
user784637

Sắp xếp, tôi đã cập nhật câu trả lời của mình với thông số kỹ thuật của mình, cảm ơn vì sự giúp đỡ của bạn =)
user784637

<lưu ý cho tương lai> Dưới đây là cách TẠO RA tìm hiểu những gì updatedbđang làm: (1.) Chạy updatedbvới --verbose--debug-pruning. (2.) Nhìn vào văn bản để xem những gì đang được lập chỉ mục và không được lập chỉ mục -> điều chỉnh của bạn /etc/updatedb.conf. Tôi grepd cho các tập tin mà tôi cần nhưng đã bị bỏ qua. Ví dụ: tôi đã sửa đổi /etc/updatedb.confvới: (1.) PRUNE_BIND_MOUNTS = "no"(2.) xóa nfs nfs4 nfsd autofskhỏi PRUNEFS(3.) xóa /netkhỏiPRUNEPATHS
Trevor Boyd Smith

Câu trả lời:


35

Các tệp từ đĩa cứng ngoài của bạn không được lập chỉ mục vì updatedbđược định cấu hình để không lập chỉ mục bất cứ thứ gì bên dưới /media, đó là nơi lưu trữ ngoài thường được gắn. Cấu hình này được thiết lập trong tập tin /etc/updatedb.conf. Cụ thể là các mục /mediatrong PRUNEPATHSdòng.

Một số ý tưởng về cách bạn có thể thực hiện updatedbđể lập chỉ mục ổ đĩa ngoài của mình:

1. Gắn ổ đĩa ngoài unter /mnt.

Nếu ổ cứng ngoài của bạn được cho là được gắn vĩnh viễn thì tôi đề nghị cấu hình nó để nó được gắn bên dưới /mntthay vì bên dưới /media. Điều đó thường có thể được thực hiện bằng cách chỉnh sửa /etc/fstab. Tìm kiếm "fstab" để tìm hiểu về điều đó. Bạn sẽ cần quyền sudo để chỉnh sửa /etc/fstab.

2. Tạo một cơ sở dữ liệu chuyên dụng cho ổ cứng ngoài của bạn và truy vấn theo yêu cầu.

Lệnh sau sẽ tạo một cơ sở dữ liệu chuyên dụng:

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

Điều này sẽ tạo cơ sở dữ liệu trong tập tin ẩn .externalharddisk.dbtrong nhà của bạn. Bạn không cần sudocho lệnh đó. Thực hiện cùng một lệnh một lần nữa để giữ cho cơ sở dữ liệu được cập nhật. Cẩn thận: nếu bạn chạy lệnh đó trong khi ổ cứng ngoài không được gắn thì updatedbsẽ nghĩ các tệp bị xóa và sẽ làm trống cơ sở dữ liệu.

Bạn có thể thiết lập một tập lệnh để tự động hóa tác vụ đó. Tìm kiếm "cronjob" để tìm hiểu làm thế nào để làm điều đó. Lưu ý: bạn có thể thiết lập một người dùng cronjob là người dùng. Bạn không cần quyền sudo để thiết lập một cronjob người dùng.

Lệnh sau sẽ truy vấn cơ sở dữ liệu:

locate -d ~/.externalharddisk.db searchterm

Bạn cũng có thể truy vấn cơ sở dữ liệu chuyên dụng và cơ sở dữ liệu mặc định cùng một lúc:

locate -d ~/.externalharddisk.db: searchterm

Dấu hai chấm ở cuối theo sau không có nghĩa là cũng tìm kiếm trong cơ sở dữ liệu mặc định.

Bạn có thể tạo một bí danh để sử dụng dễ dàng hơn. Đặt dòng sau vào .bashrc:

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

Bây giờ bạn có thể sử dụng locateđể chỉ tìm kiếm cơ sở dữ liệu mặc định và locate-externalcũng để tìm kiếm trong ổ cứng ngoài của bạn.

3. Xóa /mediakhỏiPRUNEPATHS

Lưu ý: Tôi không khuyên bạn điều này ! Điều này là do cách updatedblàm việc. Nếu updatedbchạy trong khi đĩa cứng ngoài bị loại bỏ thì tất cả các mục trỏ đến đĩa cứng ngoài sẽ bị xóa khỏi cơ sở dữ liệu. Nếu updatedbchạy trong khi đĩa cứng ngoài được kết nối thì các mục trỏ đến đĩa cứng ngoài sẽ được thêm lại. Vì updatedbđang chạy quy định trong nền, bạn không bao giờ có thể chắc chắn liệu các tệp từ ổ cứng ngoài hiện có được lập chỉ mục hay không.

Hơn nữa: nếu bạn xóa /mediakhỏi PRUNEPATHS, hành vi này cũng sẽ áp dụng cho bất kỳ bộ lưu trữ ngoài nào khác mà bạn tình cờ đã gắn kết trong khi updatedbđang cập nhật cơ sở dữ liệu.


2
Bạn cũng có thể thêm bí danh này vào ~/.bashrctệp của mình :alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77

+1 cho cả bạn và OP. Tuy nhiên, thay vì một lệnh DB bên ngoài riêng biệt locate-external, tôi đang xem xét nối thêm ba cơ sở dữ liệu vào một với --database /mnt/c...WSL, --dataabase /mnt/e...cho các tập lệnh và tài liệu được chia sẻ WSL + Linux và --database /var/lib/mlocate/mlocate.dbcho Ubuntu 16.04 khởi động kép. tức là Tất cả ba cơ sở dữ liệu trên cùng một dòng lệnh định vị (tất nhiên có bí danh). Nhưng trước khi tôi bắt đầu, thật tuyệt nếu biết nó có hoạt động không. Tôi có thể có được suy nghĩ của bạn về điều đó?
WinEunuuchs2Unix

Tôi không đồng ý với lập luận loại bỏ /mediatừ PRUNEPATHS. Mặc dù có, nó có vấn đề bạn đã đề cập, loại trừ nó hoàn toàn thậm chí còn tồi tệ hơn - bạn sẽ KHÔNG BAO GIỜ xác định vị trí các tệp trên các ổ đĩa đó. Nó giống như cắt cụt ngón tay của bạn để chúng không bị cháy trong khi nấu ăn (trừ khi có một giải pháp rõ ràng khác ngụ ý mà tôi không thấy).
Sridhar Sarnobat

2

Trong updatedb.confbạn có /mediatrong PRUNEPATHS. Bạn nên loại bỏ nó, vì các ổ đĩa ngoài của bạn dường như được gắn ở đó.


2

Đây là những tô điểm thêm để được thêm vào câu trả lời của Lesmana

[1] chỉnh trang nhẹ: tôi có thể đề nghị thêm -i để đảm bảo trường hợp truy vấn được tìm kiếm không còn là vấn đề nữa : vì vậy, để thêm vào .bashrc >>

bí danh định vị-bên ngoài = 'định vị -d ~ / .externalharddisk.db: -i '

[2] Liên quan đến việc cập nhật cả hai cơ sở dữ liệu ; một trong HD chính và một trong mới ở bên ngoài; có lẽ đáng để thêm một mục nữa vào .bashrc

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

và sau đó chỉ cần chạy updateALLtrong thiết bị đầu cuối để cập nhật cả hai cơ sở dữ liệu cùng một lúc

PS: tất nhiên đừng quên chạy . ~/.bashrcđể củng cố tất cả khi một dòng mới được lưu trong .bashrc
PS²: và tất nhiên, externalharddisktrong tất cả các dòng trên được thay thế bằng tên của tên HD bên ngoài của bạn tức là / media / YOUHDNAME

* PS³ và tất nhiên bạn có thể giới thiệu cả cập nhật và định vị trong .bashrc của bạn

bí danh LO = 'sudo updateb && updateb -l 0 -o ~ / .externalharddisk.db -U / media / outsharddisk; định vị -d ~ / .externalharddisk.db: -i '

vì vậy bây giờ tất cả những gì bạn cần cập nhật và tìm kiếm là nhập LO 'theo sau là cụm từ bạn tìm kiếm'


+1 để cập nhật trình tự và sau đó xác định vị trí
LMSingh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.