अद्यतन और कमांड समस्या का पता लगाएं - बाहरी हार्ड ड्राइव से फ़ाइलें अब रिबूट करने के बाद अनुक्रमित नहीं की जाती हैं


20

मेरे बाहरी हार्ड ड्राइव की फ़ाइलों को रिबूट करने के बाद अनुक्रमित नहीं किया जाता है। मुझे रिमूव करना है और फिर दौड़ना है

# updatedb

प्रत्येक रिबूट के बाद। मेरे बाहरी हार्ड ड्राइव के लिए समस्या को अद्यतन किया गया है कुछ मिनट लगते हैं। क्या कोई तरीका है कि मैं अपने रिबूट के बाद अपने एक्सटर्नल के लिए अनुक्रमण बनाए रख सकता हूं ताकि पता लगाने की कमान मेरे एक्सटर्नल के माध्यम से खोज सके?

संपादित करें: प्रति अनुरोध यहाँ मेरी ऐनक हैं:

$ 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 फ़ाइलें देते हैं और माउंट विकल्पों करें: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
व्यवस्था

क्या करेंगे, लगभग 8 और घंटों के लिए एक लाइनक्स मशीन तक नहीं पहुंच
पाएंगे

व्यवस्थित करें, मैंने अपना जवाब अपने चश्मे से दिया है, आपकी मदद के लिए धन्यवाद =)
user784637

भविष्य के लिए ध्यान दें> यहां बताया गया है कि सामान्य तौर पर यह पता लगाना है कि क्या updatedbकर रहा है: (1.) updatedbसाथ चलाएं --verboseऔर --debug-pruning। (२.) पाठ को देखें कि क्या अनुक्रमित किया जा रहा है और अनुक्रमित नहीं किया जा रहा है -> अपने को समायोजित करें /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उस आदेश की आवश्यकता नहीं है । डेटाबेस को अपडेट रखने के लिए उसी कमांड को फिर से निष्पादित करें। Carefull: यदि आप उस कमांड को चलाते हैं जबकि बाहरी हार्डडिस्क माउंट नहीं है, तो updatedbसोचेंगे कि फाइलें हटा दी गई हैं और डेटाबेस को खाली कर देगा।

आप उस कार्य को स्वचालित करने के लिए एक स्क्रिप्ट सेट कर सकते हैं। कैसे करना है, यह जानने के लिए "क्रोनजॉब" खोजें। नोट: आप उपयोगकर्ता के रूप में एक उपयोगकर्ता क्रोनजोब सेट कर सकते हैं। उपयोगकर्ता क्रोनजोब स्थापित करने के लिए आपको 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

आप और ओपी दोनों के लिए +1। हालांकि, एक अलग बाहरी DB कमांड के बजाय यानी locate-external, मैं --database /mnt/c...WSL के लिए एक साथ तीन डेटाबेसों को जोड़ने पर विचार कर रहा हूं , --dataabase /mnt/e...WSL + Linux के लिए साझा स्क्रिप्ट और दस्तावेज और --database /var/lib/mlocate/mlocate.dbदोहरे बूट किए गए Ubuntu 16.04 के लिए। यानी सभी तीन डेटाबेस एक ही कमांड लाइन (पाठ्यक्रम के एक उपनाम के साथ) का पता लगाते हैं। लेकिन इससे पहले कि मैं शुरू करूं यह जानना अच्छा होगा कि क्या यह काम करेगा। क्या मैं उस पर आपके विचार प्राप्त कर सकता हूं?
विनयुनुच्स

मैं दूर करने के तर्क से सहमत नहीं है /mediaसे PRUNEPATHS। हां, यह आपके द्वारा बताई गई समस्या है, इसे छोड़कर पूरी तरह से भी बदतर है - आप कभी भी उन ड्राइव पर फ़ाइलों का पता नहीं लगा पाएंगे। यह आपकी उंगलियों को नष्ट करने जैसा है, ताकि वे खाना बनाते समय जल न जाएं (जब तक कि कोई और स्पष्ट समाधान न हो जो निहित है जिसे मैं नहीं देख रहा हूं)।
श्रीधर सरनोबत

2

में updatedb.confआप /mediaमें है PRUNEPATHS। आपको इसे हटा देना चाहिए, क्योंकि आपके बाहरी ड्राइव वहां पर लगे हुए हैं।


2

लेस्माना के जवाब में ये और भी अलंकृत हैं

[१] थोड़ा सा अलंकरण: क्या मैं सुझाव दे सकता हूं कि खोजे गए क्वेरी के सुनिश्चित मामले को जोड़ने के लिए अब कोई समस्या नहीं है : ताकि tobashrc को जोड़ा जा सके >>

उपनाम पता-बाहरी = 'पता लगाएं -d ~ / .externalharddisk.db: -i '

[२] जैसा कि दोनों डेटाबेस के अद्यतन के संबंध में है ; मुख्य HD में एक और बाहरी में नया; यह शायद .bashrc में एक और प्रविष्टि जोड़ने के लायक है

उर्फ अपडेटल = 'सुडो अपडेटेड और& अपडेटब-एल 0 -ओ ~ / .externalharddisk.db -U / मीडिया / आउटरहार्डडिस्क'

और फिर updateALLटर्मिनल में बस एक ही बार में दोनों डेटाबेस को अपडेट करने के लिए चलाएं

पुनश्च: निश्चित रूप से चलाने के लिए मत भूलना . ~/.bashrcयह सब मजबूत करने के लिए एक बार एक नई लाइन .bashrc में सहेजा गया है
PS²: और निश्चित रूप से भी externalharddiskसभी में लाइनों के ऊपर से अपने बाहरी एच.डी. नाम यानी / मीडिया / YOURHDNAME नाम से प्रतिस्थापित किया गया है

* PS * और आप निश्चित रूप से दोनों अद्यतन को भ्रमित कर सकते हैं और अपने .bashrc में ढूँढ सकते हैं

उर्फ LO = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk; खोजें -d ~ / .externalharddisk.db: -i '

तो अब आप सभी को अद्यतन करने और खोज करने की आवश्यकता है LO दर्ज करने के लिए 'आपके द्वारा मांगी गई शर्तों के बाद'


अनुक्रमण अद्यतन के लिए +1 और फिर पता लगाने
LMSingh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.