คุณมีบันทึกที่ไม่ได้อยู่ในการควบคุม แทนที่จะลบอย่างบ้าคลั่งทุกวันค้นหาไฟล์หรือไฟล์ที่กำลังเติบโตอย่างรวดเร็วและมองเข้าไปข้างในเพื่อตรวจสอบสิ่งที่อาจเป็นสาเหตุ บางทีโปรแกรมบางโปรแกรมกำลังหมุนในการวนรอบการบันทึกเงื่อนไขบางอย่าง ปิดใช้งานโปรแกรมนั้นปิดใช้งานการบันทึกหรือพยายามแก้ไขเงื่อนไขที่มีการร้องเรียน
หากไฟล์มีการเติบโตต่อหน้าต่อตาของคุณและคุณไม่มีความคิดว่าโปรแกรมใดที่กำลังเขียนอยู่คุณอาจจะสามารถค้นพบมันได้อย่างง่ายดาย นี่คือตัวอย่าง ใครบ้างที่/var/log/syslog
เปิด? เราใช้fuser
คำสั่ง:
# fuser /var/log/syslog
/var/log/syslog: 602
มีเพียงกระบวนการเดียวเท่านั้นที่/var/log/syslog
เปิด มันคือกระบวนการ 602 นั่นคืออะไร? อย่าให้เรารำคาญกับps
และgrep
แต่ดูที่/proc
ระบบไฟล์โดยตรง:
# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd
Aha rsyslogd
มันเป็น เราไม่ได้ประหลาดใจที่rsyslogd
มี/var/log/syslog/
เปิด
วิธีนี้ไม่รับประกันว่าจะทำงาน เหตุผลก็คือโปรแกรมไม่ต้องเปิดไฟล์ไว้เพื่อเขียนไฟล์ สมมติว่าคุณมีกระบวนการที่เปิดไฟล์ต่อท้ายแล้วปิดมัน คุณจะมีการตรวจสอบค่อนข้างยากขึ้น คุณสามารถเรียกใช้fuser
หลาย ๆ ครั้งจนกว่าคุณจะจับกระบวนการ กระบวนการนั้นเองอาจจะเข้าและออกจากการดำรงอยู่อย่างรวดเร็ว ปัญหาอีกประการคือกระบวนการหลายอย่างอาจเปิดไฟล์ได้ แต่มีเพียงกระบวนการเดียวที่ทำให้ไฟล์มีขนาดใหญ่ขึ้น ในกรณีนี้คุณสามารถติดตามการโทรของระบบได้
# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file: 1234 23459
อ๊ะ! มีสองกระบวนการที่เปิดอยู่: 1234 และ 23459 ลองดูสิ่งที่พวกเขากำลังทำอยู่:
# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}
มันไม่ได้ทำอะไรเลยเพียงแค่บล็อกในการselect
โทร Ctrl-C เพื่อแยกการติดตาม:
select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>
ตรวจสอบรายการถัดไป:
# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C
โอ๊ะโอผู้เขียนอย่างต่อเนื่อง มันจะต้องเป็นสิ่งที่ไม่ดี เราสามารถตรวจสอบว่าไฟล์ descriptor 5 ซึ่งกระบวนการกำลังเขียนอยู่นั้นจริง ๆ แล้วเป็นไฟล์ขนาดใหญ่:
# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr 3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file
ฉันไม่สงสัยว่าคุณมีระบบไฟล์ที่เสียหาย แต่หากต้องการตรวจสอบแบบเต็มคุณไม่จำเป็นต้องบูต DVD
ก่อนอื่นให้ตรวจสอบการตั้งค่าการนับจำนวนสูงสุดของระบบไฟล์ ระบุพาร์ติชันของคุณโดยใช้คำสั่ง df ตัวอย่างในระบบ Ubuntu ฉันมีที่นี่:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 18062108 5499320 11645284 33% /
udev 392152 4 392148 1% /dev
tmpfs 159768 768 159000 1% /run
none 5120 0 5120 0% /run/lock
none 399416 200 399216 1% /run/shm
/dev/sr0 43668 43668 0 100% /media/VBOXADDITIONS_4.1.4_74291
คุณสามารถเห็นได้ว่าระบบแฟ้มจะติดตั้งอยู่/
/dev/sda1
ดังนั้น/dev/sda1
อุปกรณ์เก็บข้อมูลของพาร์ติชันรูท (และพาร์ติชันเฉพาะในระบบนี้โดยเฉพาะ)
ลองดูที่คุณสมบัติบางอย่างของระบบไฟล์นั้น วิธีนี้ปลอดภัยที่จะทำแม้ว่าจะติดตั้งแล้วก็ตาม คำสั่งพ่นเอาต์พุตจำนวนมาก นี่คือข้อความที่ตัดตอนมา:
$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name: <none>
Last mounted on: /
[ ... SNIP ... ]
Last mount time: Fri Mar 29 17:45:18 2013
Last write time: Tue Mar 5 09:08:03 2013
Mount count: 22
Maximum mount count: 22
[ ... SNIP ... ]
เฮ้ดูการนับเมาท์เท่ากับจำนวนการเมาท์สูงสุด ครั้งต่อไปที่ฉันรีบูตจะมีการตรวจสอบระบบไฟล์ สิ่งสำคัญคือการนับภูเขาเป็นค่าบวก ถ้าคุณเป็นศูนย์เปลี่ยนไปบางส่วนเช่นค่าบวก 22 tune2fs -c 22 /dev/whatever
โดยใช้ ศูนย์หมายความว่าการตรวจสอบจะไม่ถูกบังคับไม่ว่าจะติดตั้งพาร์ติชั่นกี่ครั้งก็ตาม ระบบที่รีบูตแทบจะไม่ควรมีค่าต่ำที่นี่ เซิร์ฟเวอร์ที่ล้มลงปีละครั้งอาจใช้ fsck ทุกครั้งที่รีบูต คุณสามารถกำหนดช่วงเวลาการตรวจสอบตามวันที่ได้เช่นกัน
ตอนนี้เพื่อบังคับให้ตรวจสอบคุณสามารถแทนที่จำนวนจริงที่มากกว่าหรือเท่ากับจำนวนสูงสุดแล้วรีบูต ทำด้วยทุนC
: tune2fs -C 1234 /dev/whatever
. ตอนนี้พาร์ติชันดูเหมือนว่าจะถูกเมาท์ 1234 ครั้งโดยไม่มีการตรวจสอบซึ่งมากกว่าหนึ่งหรือสองหลักสูงสุด
sudo du -sh /var/* ~/.xsession-errors
โปรดได้หรือไม่ (ทั้งสองที่ที่ฉันคาดว่าจะระเบิดขึ้นถ้ามีอะไรบางอย่างโง่) มิฉะนั้นฉันอยู่กับเอไลยาห์ - นี่คือสิ่งที่บ่งบอกถึงปัญหาของดิสก์ ทำสิ่งนี้อย่างจริงจัง