วิธีการค้นหาบันทึกการบูตก่อนหน้าหลังจาก Ubuntu 16.04+ เริ่มต้นใหม่อย่างไร


20

คำถามของฉันคือฉันจะค้นหาบันทึกการบูตจากการพยายามบูตระบบครั้งก่อนได้อย่างไร

วันนี้เมื่อเปิดเครื่องครั้งแรกพีซีของฉันกระบวนการบูตจะหยุดที่โลโก้ Ubuntu เมื่อฉันกดEscฉันได้เห็นหลายบรรทัดที่มีข้อผิดพลาดของเคอร์เนลและเริ่มต้นใหม่ที่ด้านล่างดังนั้นฉันจึงกดCtrl+ ALt+ Delและการบูตครั้งถัดไปก็ไม่มีปัญหา

ฉันมีปัญหาในการค้นหาข้อความจากหน้าจอที่ฉันเห็นในระหว่างการบู๊ตครั้งแรกไม่สำเร็จ ฉันควรถ่ายรูปไปยังโทรศัพท์ของฉันไหม?

/var/log/bootมี แต่ว่างเปล่าฉันค้นหาkern.logและsyslogสำหรับสตริงที่ฉันจำได้ด้วยวันที่วันนี้เหมือนerrorแต่ไม่พบอะไรที่คุ้นเคยกับสิ่งที่ฉันเห็นในหน้าจอบูตก่อนหน้านี้

$ journalctl -b -1 ให้เฉพาะเคอร์เนลข้อความระหว่างการบู๊ตฉันสามารถหาที่อื่นได้เช่นกันและพวกเขาไม่ใช่สิ่งที่ปรากฏบนหน้าจอในระหว่างการบูต journalctl ไม่มีประโยชน์สำหรับฉันฉันกำลังมองหาข้อความที่ปรากฏบนหน้าจอในช่วงเวลาบู๊ต

สำหรับตอนนี้มีเพียงตัวเลือกเท่านั้นที่จะถ่ายภาพเขียนข้อความบนกระดาษ

คำตอบ:


17

รายงานว่าเป็นจุดบกพร่องซึ่งเป็นคุณลักษณะที่ไม่มีเอกสาร

มีรายงานข้อผิดพลาดในหัวข้อนี้ เพราะrsyslogอยู่แล้วรักษาวารสารบูตหลายใน/var/log/syslogและsyslog.1, .2.gz, .3.gz... syslog.7.gzนักพัฒนาที่รู้สึกว่าการรักษาพิเศษjournalctlบันทึกจะเสียพื้นที่ดิสก์

รายงานข้อผิดพลาดระบุเมื่อวันที่ 3 มกราคม 2018ว่าสำหรับการติดตั้งใหม่rsyslogจะไม่เป็นค่าเริ่มต้นอีกต่อไปและjournalctlจะเก็บบันทึกการบูตข้อมูลหลายรายการ

สร้างบันทึกการบูตหลายรายการโดยไม่ต้องติดตั้ง Ubuntu ใหม่

พวกเราส่วนใหญ่จะไม่ทำการติดตั้งใหม่ดังนั้นเพื่อเปิดใช้งานการjournalctlบันทึกการบูตหลายครั้งซึ่งในกรณีนี้เราสามารถใช้:

$ sudo mkdir -p /var/log/journal
$ sudo systemd-tmpfiles --create --prefix /var/log/journal
Cannot set file attribute for '/var/log/journal', value=0x00800000, mask=0x00800000: Operation not supported

ตามGitHubนี้รายงานข้อความเตือน"ไม่สามารถตั้งค่าแอตทริบิวต์ไฟล์"สามารถละเว้น

การตั้งค่าหน่วยเก็บถาวรแบบเลือกได้

หลังจากใช้การบันทึกการบูตก่อนหน้านี้เป็นเวลาหลายเดือนฉันได้ค้นพบตัวเลือกอื่นที่สามารถตั้งค่าได้ใน/etc/systemd/journald.conf:

จากหน้าคน journald.conf :

= การจัดเก็บข้อมูล

ควบคุมตำแหน่งที่จะเก็บข้อมูลเจอร์นัล หนึ่งใน "volatile", "persistent", "auto" และ "none" หาก "เปลี่ยนแปลงได้" ข้อมูลบันทึกรายวันจะถูกเก็บไว้ในหน่วยความจำเท่านั้นเช่นใต้ / ลำดับชั้น / เรียกใช้ / บันทึก / สมุดรายวัน (ซึ่งถูกสร้างขึ้นหากจำเป็น) หาก "ถาวร" ข้อมูลจะถูกเก็บไว้บนดิสก์เช่นด้านล่างของ/var/log/journalลำดับชั้น (ซึ่งสร้างขึ้นหากจำเป็น) โดยมีทางเลือกกลับไปที่/run/log/journal(ซึ่งถูกสร้างหากจำเป็น) ในระหว่างการบูตในช่วงต้นและหากดิสก์ไม่สามารถเขียนได้ "auto" คล้ายกับ "persistent" แต่/var/log/journal ไม่ได้สร้างไดเรกทอรีหากจำเป็นเพื่อให้การควบคุมการดำรงอยู่ของข้อมูลบันทึก "none" ปิดการเก็บข้อมูลทั้งหมดข้อมูลบันทึกที่ได้รับจะถูกทิ้ง การส่งต่อไปยังเป้าหมายอื่น ๆ เช่นคอนโซล บัฟเฟอร์บันทึกเคอร์เนลหรือซ็อกเก็ต syslog จะยังคงทำงานได้ เริ่มต้นที่ "อัตโนมัติ"

สรุปลบความคิดเห็นและแก้ไขบรรทัดเป็น:

Storage=persistent

แสดงรายการรองเท้าก่อนหน้า

$ journalctl --list-boots
-15 58a9e56135564cd8a52d547b19e76bf5 Fri 2018-02-02 18:34:35 MST—Fri 2018-02-02 23:07:14 M
-14 3514e056440341b1b6e5f03d109681bc Sat 2018-02-03 06:05:12 MST—Sat 2018-02-03 08:07:44 M
-13 0d1a32dc275348589f5ecdc72180c018 Sat 2018-02-03 08:08:05 MST—Sat 2018-02-03 08:08:34 M
-12 74159b593f3a401589ee6bd78e31684b Sat 2018-02-03 08:08:51 MST—Sun 2018-02-04 08:32:09 M
-11 4b394a9aad584ab2bfabe3b77eeed78f Sun 2018-02-04 08:32:26 MST—Mon 2018-02-05 16:54:02 M
-10 8e461ed2593c4fd896ca3b71eb3c0fba Mon 2018-02-05 16:54:34 MST—Tue 2018-02-06 03:54:30 M
 -9 ec7ba0e4dfe241c0b9c978d278fcca6d Tue 2018-02-06 03:54:47 MST—Tue 2018-02-06 16:25:02 M
 -8 b5c110267c214c38b63d0a367197d118 Tue 2018-02-06 16:25:19 MST—Thu 2018-02-08 16:49:03 M
 -7 75c3b117ac6a4de984dc3ced15edb7f8 Thu 2018-02-08 16:49:22 MST—Fri 2018-02-09 03:51:09 M
 -6 7338bd1007bc42dda5c8667eeefe1a59 Fri 2018-02-09 03:51:26 MST—Fri 2018-02-09 16:55:52 M
 -5 4b6cd0121327454ca3db035c7ed42df6 Fri 2018-02-09 16:56:09 MST—Sat 2018-02-10 07:55:14 M
 -4 0d56207f9ec0405ca3a3fd638334de2f Sat 2018-02-10 07:55:32 MST—Mon 2018-02-12 22:16:05 M
 -3 0f230cc546fd4aec8f5233e0074ab3e1 Tue 2018-02-13 03:57:20 MST—Wed 2018-02-14 22:58:56 M
 -2 c0d2c0141dd840cbab75d3c2254f8781 Wed 2018-02-14 22:59:13 MST—Sat 2018-02-17 22:46:14 M
 -1 aafb2573a6374e019a7165cb8eee74a0 Sun 2018-02-18 06:02:03 MST—Mon 2018-02-19 04:16:36 M
  0 8462f1969c6f4d61973e7e245014b846 Mon 2018-02-19 04:16:53 MST—Tue 2018-02-20 18:51:42 M

แสดงบันทึกการบูตล่าสุด

$ journalctl -b-1
-- Logs begin at Fri 2018-02-02 18:34:35 MST, end at Thu 2018-03-01 16:43:25 MST. --
Feb 28 20:03:15 alien systemd-journald[290]: Runtime journal (/run/log/journal/) is 8.0M, 
Feb 28 20:03:15 alien kernel: Linux version 4.14.23-041423-generic (kernel@kathleen) (gcc 
Feb 28 20:03:15 alien kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.14.23-041423-generi
Feb 28 20:03:15 alien kernel: KERNEL supported cpus:
Feb 28 20:03:15 alien kernel:   Intel GenuineIntel
Feb 28 20:03:15 alien kernel:   AMD AuthenticAMD
Feb 28 20:03:15 alien kernel:   Centaur CentaurHauls
Feb 28 20:03:15 alien kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point
Feb 28 20:03:15 alien kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
Feb 28 20:03:15 alien kernel: x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
Feb 28 20:03:15 alien kernel: x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registe
Feb 28 20:03:15 alien kernel: x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
Feb 28 20:03:15 alien kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
Feb 28 20:03:15 alien kernel: x86/fpu: xstate_offset[3]:  832, xstate_sizes[3]:   64
Feb 28 20:03:15 alien kernel: x86/fpu: xstate_offset[4]:  896, xstate_sizes[4]:   64
Feb 28 20:03:15 alien kernel: x86/fpu: Enabled xstate features 0x1f, context size is 960 b
Feb 28 20:03:15 alien kernel: e820: BIOS-provided physical RAM map:
Feb 28 20:03:15 alien kernel: BIOS-e820: [mem 0x0000000000000000-0x0000000000057fff] usabl
lines 1-19

ให้ความสนใจกับพารามิเตอร์-b-1ซึ่งแตกต่างจากการอ้างอิงอื่น ๆ ที่คุณอาจเห็น จากหน้าคน :

-b [ID][±offset], --boot=[ID][±offset]

แสดงข้อความจากการบู๊ตเฉพาะ สิ่งนี้จะเพิ่มการจับคู่สำหรับ "_BOOT_ID ="

อาร์กิวเมนต์อาจว่างเปล่าซึ่งในกรณีนี้บันทึกสำหรับการบู๊ตปัจจุบันจะปรากฏขึ้น

หากไม่ระบุ ID การบู๊ตการชดเชยในเชิงบวกจะค้นหาการบู๊ตเริ่มต้นจากจุดเริ่มต้นของเจอร์นัลและการชดเชยออฟเซ็ตเท่ากับหรือน้อยกว่าศูนย์จะค้นหาการบู๊ตเริ่มต้นจากจุดสิ้นสุดของเจอร์นัล ดังนั้น 1 หมายถึงการบูตครั้งแรกที่พบในวารสารตามลำดับเวลา 2 ครั้งที่สองเป็นต้น ในขณะที่ -0 คือการบูตครั้งสุดท้าย -1 การบูตก่อนหน้านี้และอื่น ๆ ออฟเซ็ตเปล่าเทียบเท่ากับการระบุ -0 ยกเว้นเมื่อการบู๊ตปัจจุบันไม่ใช่การบู๊ตครั้งสุดท้าย (เช่นเนื่องจาก - ไดเรกทอรีถูกระบุเพื่อดูล็อกจากเครื่องอื่น)

จากนั้นทุกครั้งเป็นครั้งคราวด้วยcronหรือตัวจับเวลาคุณสามารถล้างบันทึกเก่า :

journalctl --vacuum-time=2d  # keep last two days or

journalctl --vacuum-size=300M  # keep last 300MB

คุณจะต้อง หรือsystemctl restart systemd-journald killall -USR1 systemd-journaldนอกจากนี้ยัง uncomment จากStorage=auto /etc/systemd/journald.conf
Pablo Bianchi

@PabloBianchi ขอบคุณสำหรับความคิดเห็นของคุณ เนื่องจากฉันได้สร้างบันทึกการบูตแบบหลายเครื่องและเครื่องดูดฝุ่นเพื่อปรับลดลงจาก 300MB + เป็น <150MB เป็นการตั้งค่าเป็นcronงานรายเดือนฉันไม่รู้สึกอยากลบทุกอย่างและเริ่มใหม่ตั้งแต่เริ่มต้นเพื่อทดสอบคำแนะนำของคุณ หวังว่ามันจะช่วยให้ผู้อื่นหลีกเลี่ยงข้อความแสดงข้อผิดพลาดที่ดูเหมือนจะไม่มีผลอะไรเลย
WinEunuuchs2Unix

1
@PabloBianchi "storage = auto" เป็นค่าเริ่มต้น ฉันได้แก้ไขคำตอบแล้วซึ่งแสดงว่า "storage = persistent" เป็นคำแนะนำที่อ้างอิงจากแหล่งที่มาหรือไม่
WinEunuuchs2Unix

9

ฉันมีปัญหาเดียวกันและเห็นได้ชัดว่าพบคำตอบในช่อง#ubuntuirc

ไม่ว่าด้วยเหตุผลใดก็ตามฉันหายไปจาก/var/log/journal systemd-journal ของกลุ่มโฟลเดอร์

หลังจากเพิ่มโฟลเดอร์ฉันก็สามารถดูบันทึกการบู๊ตก่อนหน้าผ่าน $ journalctl -b1


ขอบคุณ แต่ฉันจัดการเพื่อทำให้ journalctl ทำงานได้อย่างสมบูรณ์แบบเมื่อไม่นานมานี้ แต่ไม่มีบันทึกการบูตที่นั่นเป็นเพียงข้อความเคอร์เนลจากเวลาบูตฉันสามารถหาที่อื่นได้เช่นกัน ฉันไม่ได้จัดการเพื่อค้นหาบันทึกที่มีข้อความที่ปรากฏบนหน้าจอระหว่างการบู๊ต
Mike

10
อันที่จริงการแก้ปัญหาทางเลือกที่จะได้รับในวิกิพีเดียคือการตั้งค่าStorage=persistentในและเรียกใช้/etc/systemd/journald.conf systemctl restart systemd-journald
dma_k

1
yup ก็กำลังผุดขึ้น/var/log/journalเช่นกัน! นี่คือการติดตั้งใหม่วิธีการบางสิ่งที่สำคัญพอ ๆ กับวารสารหายไป !!!
dashesy

ในการแก้ไขกรณีของฉัน/etc/systemd/journald.conf สร้าง nonexistant ก่อนหน้านี้/var/log/journal/และเติมด้วยไดเรกทอรีย่อยที่มี bootlog loooong (ใช้เวลา 1 นาทีเพื่อให้เสร็จสมบูรณ์)
knb

@ knb, fwiw, ฉันค่อนข้างแน่ใจว่ามันคือสิ่งsystemctl restart systemd-journaldที่สร้าง / var / log / journal ของคุณจริง ๆ
Auspex

5

ขั้นตอนในการแก้ไขปัญหาจากคำตอบสูงสุดที่นี่จากหน้า man สำหรับ systemd-journald:

mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
systemctl restart systemd-journald

ฉันทำสิ่งนี้เป็น su


3

คำตอบสามารถพบได้ในman journald.confตัวเลือกเฉพาะStorage=:

ควบคุมตำแหน่งที่จะเก็บข้อมูลเจอร์นัล หนึ่งใน "ระเหย", "ถาวร", "อัตโนมัติ" และ "ไม่มี" [... ] "auto" คล้ายกับ "persistent" แต่ไดเร็กทอรี / var / log / journal ไม่ถูกสร้างหากจำเป็นเพื่อให้การควบคุมการมีอยู่ของมันอยู่ที่ไหนข้อมูลบันทึกไป [... ] ค่าเริ่มต้นเป็น "อัตโนมัติ"

โปรดทราบว่าไม่จำเป็นต้องมีการวนรอบการบันทึกหรือเทคนิคที่คล้ายกันซึ่งเป็นเรื่องธรรมดากับ syslog daemon เก่า ไฟล์เจอร์นัลนั้นจะถูกตั้งค่าตามค่าเริ่มต้นเพื่อเพิ่มขนาดและรายการบันทึกเก่าจะถูกลบโดยอัตโนมัติเมื่อไฟล์เจอร์นัลมีขนาดใหญ่เกินไป

ในระบบของฉันขนาดนี้ได้รับการกำหนดค่าเป็น 120MB คุณสามารถปรับได้/etc/systemd/journald.confสำหรับหน่วย systemd-journald.service


3

ใช้journalctl -bXโดยที่ x คือการบูตที่คุณอ้างถึงดังนั้นจึง-b0เป็นการบูตจริงของคุณและ-b-1การบูตก่อนหน้านี้ (ซึ่งจะทำงานเฉพาะในกรณีที่คุณมีโฟลเดอร์/var/log/journalที่อยู่ในกลุ่ม 'systemd-journal' ปัจจุบัน) ไม่สามารถบอกคุณได้ว่าคุณจะไปได้ไกลแค่ไหน แต่ทั้งสองอย่างแน่นอน

รายการบู๊ทที่มีอยู่ด้วย

journalctl --list-boots

2
-b0 ทำงานได้ แต่ -b1 ให้ฉันSpecifying boot ID has no effect, no persistent journal was found.หลังจาก googling ฉันคิดว่ามันจะต้องมีการเปิดใช้งานสำหรับการจัดเก็บข้อมูลเพิ่มเติม
Mike

จากนั้นฉันเดาว่าเป็นข้อมูลที่หายไปจากการบูตที่ล้มเหลว ดูที่นี่ฉันเพิ่งพบว่าตัวเองเป็นไปไม่ได้โดยไม่ต้องยุ่งยากมากในการเปิดใช้งานการบันทึกเก่า มีเวลาประมาณ 2 ชั่วโมงในการเล่นซอระบบของฉัน
Videonauth

โหวต แต่ฉันหวังว่าบางคนจะเพิ่มวิธีอื่นในการทำเช่นนี้คงจะเป็นเรื่องน่าละอายถ้าการค้นหาบันทึกการบูตก่อนหน้านี้จากเซสชันก่อนหน้าเป็นไปไม่ได้ด้วยการกำหนดค่าเริ่มต้น
Mike

1
โพสต์ที่นี่ทำงานในการกำหนดค่าเริ่มต้นบน Ubuntu Server 16.04LTS ( unix.stackexchange.com/a/345978/77095 ) journalctl -o short-precise -k -b -1แสดงการบูตครั้งสุดท้าย
jtlindsey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.