updatedb & ระบุปัญหาคำสั่ง - ไฟล์จากฮาร์ดไดรฟ์ภายนอกจะไม่ถูกทำดัชนีหลังจากรีบูตเครื่อง


20

ไฟล์จากฮาร์ดไดรฟ์ภายนอกของฉันจะไม่ถูกทำดัชนีหลังจากรีบูตเครื่อง ฉันต้องนับใหม่แล้วเรียกใช้

# updatedb

หลังจากรีบูตแต่ละครั้ง ปัญหาได้รับการอัพเดทแล้วใช้เวลาไม่กี่นาทีสำหรับฮาร์ดไดรฟ์ภายนอกของฉัน มีวิธีใดบ้างที่ฉันจะสามารถสร้างดัชนีสำหรับ externals ของฉันหลังจากที่ฉันรีบูตเพื่อให้คำสั่ง locate สามารถค้นหาผ่าน externals ของฉันได้หรือไม่?

แก้ไข: ตามคำขอนี่คือข้อกำหนดของฉัน:

$ 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
โปรดให้ config ไฟล์และตัวเลือก mount: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
จัด

จะทำเช่นนั้นจะไม่สามารถเข้าถึงเครื่อง linux ได้อีกประมาณ 8 ชั่วโมง
user784637

จัดเรียงฉันได้อัปเดตคำตอบพร้อมสเป็คแล้วขอบคุณสำหรับความช่วยเหลือของคุณ =)
user784637

<บันทึกสำหรับอนาคต> นี่เป็นวิธีการทั่วไปคิดออกว่าupdatedbจะทำ (1) เรียกupdatedbด้วยและ--verbose --debug-pruning( 2. ) การดูที่ข้อความเพื่อดูสิ่งที่จะถูกจัดทำดัชนีและไม่ได้ถูกจัดทำดัชนี -> /etc/updatedb.confปรับของคุณ ฉันgrepต้องการไฟล์ที่ฉันต้องการ แต่ถูกข้ามไป ตัวอย่างเช่นฉันได้แก้ไข/etc/updatedb.confด้วย: (1. ) PRUNE_BIND_MOUNTS = "no"(2. ) ลบออกnfs nfs4 nfsd autofsจากPRUNEFS(3. ) ลบออก/netจากPRUNEPATHS
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 เป็นผู้ใช้ คุณไม่ต้องการสิทธิ์ sudo ในการตั้งค่า cronjob ผู้ใช้

คำสั่งต่อไปนี้จะสอบถามฐานข้อมูล:

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

+1 ทั้งคุณและ OP อย่างไรก็ตามแทนที่จะเป็นคำสั่ง DB ภายนอกที่แยกต่างหากนั่นคือlocate-externalฉันกำลังพิจารณาผนวกสามฐานข้อมูลไว้ในฐานข้อมูลเดียว--database /mnt/c...สำหรับ WSL, --dataabase /mnt/e...สำหรับสคริปต์และเอกสารที่ใช้ร่วมกันของ WSL + Linux และ--database /var/lib/mlocate/mlocate.dbสำหรับ Ubuntu 16.04 แบบดูอัลบูต เช่นฐานข้อมูลทั้งสามในบรรทัดคำสั่งค้นหาเดียวกัน (พร้อมนามแฝงแน่นอน) แต่ก่อนที่ฉันจะเริ่มมันคงจะดีถ้ารู้ว่ามันใช้ได้ ฉันขอทราบความคิดเห็นของคุณได้ไหม
WinEunuuchs2Unix

ผมไม่เห็นด้วยกับข้อโต้แย้งของถอดจาก/media PRUNEPATHSแม้ว่าจะมีปัญหาที่คุณกล่าวถึง แต่การแยกออกทั้งหมดนั้นแย่ยิ่งกว่าเดิม - คุณจะไม่พบไฟล์ในไดรฟ์เหล่านั้น มันเหมือนกับการตัดนิ้วของคุณดังนั้นพวกเขาจึงไม่ถูกไฟไหม้ในขณะที่กำลังปรุงอาหาร
Sridhar Sarnobat

2

ในupdatedb.confคุณมีใน/media PRUNEPATHSคุณควรลบออกเนื่องจากดูเหมือนว่าจะติดตั้งไดรฟ์ภายนอกของคุณ


2

สิ่งเหล่านี้เป็นการปรุงแต่งเพิ่มเติมเพื่อเพิ่มเข้าไปในคำตอบของ Lesmana

[1] การจัดแต่งเล็กน้อย: ฉันขอแนะนำให้เพิ่ม -i เพื่อให้แน่ใจว่ากรณีของการสืบค้นที่สืบค้นไม่มีปัญหาอีกต่อไปดังนั้นเพื่อเพิ่ม. bashrc >>

นามแฝง locative-external = 'ค้นหา -d ~ / .externalharddisk.db: -i '

[2] ในฐานะที่นับถือปรับปรุงฐานข้อมูลทั้ง ; หนึ่งใน HD หลักและใหม่ในภายนอก มันน่าจะเพิ่มมูลค่าอีกหนึ่งรายการใน. bashrc

alias updateALL = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / สื่อ / externalharddisk'

จากนั้นให้เรียกใช้updateALLในเทอร์มินัลเพื่ออัปเดตฐานข้อมูลทั้งสองในครั้งเดียว

PS: แน่นอนว่าอย่าลืมวิ่ง. ~/.bashrcให้มั่นคงทุกครั้งที่มีการบันทึกบรรทัดใหม่ใน. bashrc
PS²: และแน่นอนexternalharddiskในทุกบรรทัดข้างต้นจะถูกแทนที่ด้วยชื่อของชื่อ HD ภายนอกของคุณเช่น / media / YOURHDNAME

* PS³และคุณสามารถทำให้ทั้งคู่อัปเดตและค้นหาใน. bashrc ของคุณ

นามแฝง LO = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / สื่อ / externalharddisk; ค้นหา -d ~ / .externalharddisk.db: -i '

ดังนั้นตอนนี้สิ่งที่คุณต้องอัปเดตและการค้นหาคือการป้อน LO 'ตามด้วยคำที่คุณค้นหา'


+1 สำหรับการอัปเดตตามลำดับแล้วค้นหา
LMSingh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.