ทำไม mdworker segfault เมื่อสแกนไฟล์ที่ root เป็นเจ้าของ


2

ในขณะที่ตรวจสอบดิสก์ที่มีพื้นที่ว่างลดน้อยลงและ CPU ตรึงที่> 100% ในที่สุดฉันก็พบว่าปัญหานี้เกิดจากการแยกย่อยmdworkerซ้ำ ๆ ทำให้ syslogd และ CrashReporter ยุ่งมาก

ฉันพยายามสร้างดัชนีของ Spotlight ใหม่ด้วยวิธีปกติ: อันดับแรกผ่านแท็บความเป็นส่วนตัวในการตั้งค่าระบบ -> สปอตไลต์จากนั้นผ่านmdworker -i off / ; mdworker -E -i on /และเหมือนกันอีกครั้ง แต่มีการแทรกแซงrm -rf /.Spotlight-V100และรีบูตเพื่อวัดที่ดี ดูเหมือนจะไม่มีอะไรแก้ปัญหาได้

การใช้แท็บความเป็นส่วนตัวเพื่อยกเว้นทุกอย่างยกเว้น/Applications/และจากนั้นเพิ่ม / ลบโฟลเดอร์นี้เพื่อบังคับให้สแกนซ้ำอีกครั้งและฉันสามารถระบุได้ว่าไฟล์บางไฟล์กำลังจัดทำดัชนีอย่างถูกต้อง (และแสดงในผลลัพธ์ Spotlight) แต่บางไฟล์ไม่ ; อีกเล็กน้อย poking รอบด้วยopensnoop -n mdworkerแสดงให้เห็นว่าเมื่อmdworkerมีการเริ่มต้นด้วยการโพสต์ 501 ในการสแกนแอพลิเคชันไฟล์ที่เป็นของฉันมันทำงานได้ดี (และเดียวกันสำหรับ UIDs อื่น ๆ ไม่กี่คนที่เป็นเจ้าของไฟล์ใน/Applications/) แต่เมื่อมีการเริ่มต้นด้วยการโพสต์ 89 ( _spotlightตาม to dscl . -list /Users UniqueID) - สันนิษฐานว่าน่าจะสแกนไฟล์ที่ root เป็นเจ้าของ - มันคือ segfaults

นี่คือรายการตัวอย่างจาก Console:

2015-07-16 13:53:25 com.apple.launchd[1]    (0x100101670.mach_init.mdworker[13276]) Job appears to have crashed: Segmentation fault
2015-07-16 13:53:25 com.apple.ReportCrash.Root[13274]   2015-07-16 13:53:25.326 ReportCrash[13274:341b] Saved crash report for mdworker[13276] version ??? (???) to /Library/Logs/DiagnosticReports/mdworker_2015-07-16-135325-1_localhost.crash

และนี่คือข้อความที่ตัดตอนมาจากรายงานความผิดพลาด (มันเหมือนกันหมด):

Process:         mdworker [13276]
Path:            /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Support/mdworker
Identifier:      mdworker
Version:         ??? (???)
Code Type:       X86-64 (Native)
Parent Process:  launchd [1]

Date/Time:       2015-07-16 13:53:25.085 +0100
OS Version:      Mac OS X 10.6.8 (10K549)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x000000010f5d1062
Crashed Thread:  3

[...]

Thread 3 Crashed:
0   ...ple.CoreServices.CarbonCore  0x00007fff867e7f0b CSStoreGetUnit + 84
1   com.apple.LaunchServices        0x00007fff821721ab _LSContainerCheckState + 65
2   com.apple.LaunchServices        0x00007fff82188fea _LSCopyLibraryItemURLs + 419
3   mdworker                        0x0000000100004305 0x100000000 + 17157
4   mdworker                        0x0000000100004c22 0x100000000 + 19490
5   mdworker                        0x00000001000050f3 0x100000000 + 20723
6   mdworker                        0x0000000100009aa2 0x100000000 + 39586
7   libSystem.B.dylib               0x00007fff80b94fd6 _pthread_start + 331
8   libSystem.B.dylib               0x00007fff80b94e89 thread_start + 13

[...]

ฉันแน่ใจว่าเหตุผลนี้ไม่ได้เกิดจากเนื้อหาของไฟล์ที่พยายามสแกนเพราะควรสแกน/Applications/และopensnoopไม่รายงานว่าแตะไฟล์ใด ๆ ที่นั่น (อันที่จริงรายการของไฟล์ที่เปิดสำหรับการหยุดทำงาน UID 89 แต่ละอัน อินสแตนซ์นั้นเหมือนกัน AFAICT)

เป็นไปได้ว่าปัญหานี้เกี่ยวข้องกับปัญหาที่ฉันมีกับ Time Machine ซึ่งเริ่มต้นในเวลาประมาณเดียวกัน: backupdยังมี segfaults โดยไม่คาดคิด - ไม่ทันทีเมื่อเริ่มต้น แต่อยู่ระหว่างการติดตั้งไดรฟ์ข้อมูลสำรอง NAS ของฉัน นี่คือข้อความที่ตัดตอนมาจากรายงานความผิดพลาด backupd:

Thread 5 Crashed:
0   ...ple.CoreServices.CarbonCore  0x00007fff867e7f0b CSStoreGetUnit + 84
1   com.apple.LaunchServices        0x00007fff8217f3fb _LSBundleFindWithNode + 544
2   com.apple.LaunchServices        0x00007fff82177bd1 _LSFindOrRegisterBundleNode + 219
3   com.apple.LaunchServices        0x00007fff82177a85 _LSCopyItemAttributeForRefInfoWithOptions + 201
4   com.apple.LaunchServices        0x00007fff821799cf prepareAttributeValueForKey(__CFURL const*, __FileCache*, __CFString const*, void const**, __CFError**) + 79
5   com.apple.LaunchServices        0x00007fff82179934 prepareDistinctLocalizedNameValue(__CFURL const*, __FileCache*, __CFError**) + 36
6   com.apple.LaunchServices        0x00007fff8217990b prepareLocalizedNameValue(__CFURL const*, __FileCache*, __CFError**) + 9
7   com.apple.LaunchServices        0x00007fff82179712 LSPropertyProviderPrepareValues(__CFURL const*, __FileCache*, __CFString const* const*, void const**, long, void const*, __CFError**) + 51
8   ...ple.CoreServices.CarbonCore  0x00007fff867f8dd4 prepareValuesForBitmap(__CFURL const*, __FileCache*, _FilePropertyBitmap*, __CFError**) + 264
9   ...ple.CoreServices.CarbonCore  0x00007fff867f78bd _FSURLCopyResourcePropertiesForKeys + 980
10  com.apple.CoreFoundation        0x00007fff897dc562 CFURLCopyResourcePropertiesForKeys + 98
11  com.apple.DesktopServices       0x00007fff833737af TCFURLInfo::FetchProperties(bool) + 91
12  com.apple.DesktopServices       0x00007fff8337358f TCFURLInfo::Initialize(__CFURL const*, bool, bool) + 183
13  com.apple.DesktopServices       0x00007fff833d1acd TCFURLInfo::Initialize(char const*, unsigned int) + 89
14  com.apple.DesktopServices       0x00007fff833d369c TCFURLInfo::CreateDirectory(TUString const&, TUniqueNamer*, __FSFileSecurity*, bool, TCountedPtr<TCFURLInfo>&) const + 464
15  com.apple.DesktopServices       0x00007fff833dc95a TCopyWriter::CreateNewDestinationItem() + 178
16  com.apple.DesktopServices       0x00007fff833dd136 TCopyWriter::CreateItem() + 1126
17  com.apple.DesktopServices       0x00007fff833dd41e TCopyWriter::Write() + 146
18  com.apple.DesktopServices       0x00007fff833dd6a6 TCopyWriter::WriteTaskProc(void*) + 72
19  ...ple.CoreServices.CarbonCore  0x00007fff867e40d1 PrivateMPEntryPoint + 63
20  libSystem.B.dylib               0x00007fff80b94fd6 _pthread_start + 331
21  libSystem.B.dylib               0x00007fff80b94e89 thread_start + 13

ฉันใช้ Disk Utility เพื่อ (สด) ตรวจสอบระดับเสียงและสิทธิ์การซ่อมแซม ฉันได้ลองติดตั้ง 10.6.8 Combo Update 1.1 และการปรับปรุงเพิ่มเติมแล้ว

สิ่งที่อาจทำให้เกิดปัญหาเหล่านี้และฉันจะแก้ไขได้อย่างไร


สมมติว่าคุณติดตั้งแอปของบุคคลที่สามแล้วนี่เป็นแนวคิดหนึ่ง ลอง "แบ่งครึ่ง" บน / แอปพลิเคชัน - เช่นย้ายแอพครึ่งที่อื่นไปชั่วคราวสร้างดัชนีใหม่และดูว่ามันล้มเหลวหรือไม่ ... ถ้าล้มเหลวปัญหาอยู่ในแอพที่เหลืออยู่: ทำซ้ำกระบวนการจนกว่าคุณจะแคบลง ลง (หวังว่า) แอปหนึ่งที่เฉพาะเจาะจง (เขียนอย่างเร่งด่วน: ขอโทษถ้าสิ่งนี้ไม่ชัดเจน ... )
Ashley

@Ashley: นั่นจะทำให้รู้สึกว่ามันเคยเปิดไฟล์ใด ๆ ที่/Applications/เป็นของrootแต่มันไม่ได้ไปไกลขนาดนั้น
cpcallen

คำตอบ:


5

ปัญหาเกิดจากแคช Launch Services ที่เสียหายและฉันแก้ไขได้โดยดำเนินการคำสั่งต่อไปนี้:

sudo find /System/Library/Frameworks -type f -name lsregister -exec {} -kill -seed -r \;

เบาะแสคือว่า segfault เกิดขึ้นที่CSStoreGetUnit + 84ทั้งสองกระบวนการ การค้นหาอย่างรวดเร็วของ Google นำไปสู่รายการบล็อกซึ่งอาจทำให้เกิดปัญหาแคชเสียหาย แทนที่จะrmติดตามไฟล์แคชด้วยตนเองฉันทำตามคำแนะนำที่พบใน The X Labซึ่งมีคำอธิบายโดยละเอียดเกี่ยวกับวิธีเปิดเทอร์มินัลเพื่อเรียกใช้คำสั่งดังกล่าวโดยสังเกตว่า:

  • มีการพิมพ์ที่เกี่ยวข้องกับ smartquotes ในหน้านั้น (รายงาน)
  • ตั้งแต่mdworkerวิ่งได้ดีเหมือน UID 501 (และอื่น ๆ อีกมากมาย) ฉันเดาว่าฉันจะต้องรีเซ็ตrootแคชการเปิดตัวของบริการ คำนำหน้าsudoมีผลตามที่ต้องการ

หมายเหตุเพิ่มเติม:

  • ใน 10.8.6 (อย่างน้อย) คุณสามารถดูไฟล์แคชบริการเรียกใช้งานทั้งหมดด้วยคำสั่งต่อไปนี้:

    sudo find /var/folders /Library/Caches/ -name '*LaunchServices*' -print0 |sudo xargs -0 ls -l 
    
  • ด้วยเหตุผลที่ไม่ทราบสาเหตุไฟล์แคชที่เพิ่งแก้ไขสำหรับ UID 501 มีอยู่ทั้งใน/Library/Caches/และ/var/folders/; UIDs อื่น ๆ /var/folders/ที่มีเพียงหนึ่งภายใต้ ดูเหมือนจะไม่ทำให้เกิดปัญหาใด ๆ

  • backupdนี้ไม่ได้แก้ปัญหาด้วย

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