วิธีใช้คำสั่ง fsck บน Linux
เผยแพร่แล้ว: 2022-01-29 ข้อมูลสำคัญทั้งหมดของเราอยู่ในระบบไฟล์ประเภทใดประเภทหนึ่ง และปัญหาระบบไฟล์จะต้องเกิดขึ้นอย่างแน่นอน บน Linux เราสามารถใช้คำสั่ง fsck
เพื่อค้นหาและแก้ไขข้อผิดพลาดของระบบไฟล์
ระบบไฟล์เป็นซอฟต์แวร์
ระบบไฟล์เป็นหนึ่งในองค์ประกอบที่สำคัญที่สุดของคอมพิวเตอร์ หากไม่มีระบบไฟล์ คอมพิวเตอร์จะไม่สามารถจัดเก็บข้อมูลใดๆ บนฮาร์ดไดรฟ์ได้ ไม่ว่าจะเป็นไดรฟ์แบบกลไกหมุนหรือไดรฟ์โซลิดสเทต ที่จริงแล้ว ต้องสร้างระบบไฟล์ก่อนจึงจะสามารถติดตั้งระบบปฏิบัติการบนฮาร์ดไดรฟ์ได้ จะต้องมีบางอย่างสำหรับไฟล์ระบบปฏิบัติการที่จะจัดเก็บ ดังนั้นระบบไฟล์จะถูกสร้างขึ้นในระหว่างกระบวนการติดตั้ง
ระบบไฟล์สร้างขึ้นโดยซอฟต์แวร์ เขียนโดยซอฟต์แวร์ และอ่านจากซอฟต์แวร์ อย่างที่คุณทราบ ซอฟต์แวร์ที่ซับซ้อนทั้งหมดมีข้อบกพร่อง ข้อมูลของเรามีความสำคัญอย่างยิ่งต่อเรา ดังนั้นเราจึงเชื่อมั่นอย่างมากในระบบไฟล์และซอฟต์แวร์ที่สร้างและใช้งาน หากมีสิ่งผิดปกติเกิดขึ้น เราอาจสูญเสียการเข้าถึงบางส่วนของระบบไฟล์หรือแม้แต่พาร์ติชั่นทั้งหมด
ระบบไฟล์เจอร์นัลสมัยใหม่นั้นดีกว่าในการจัดการปัญหาที่อาจเกิดจากการสูญเสียพลังงานอย่างกะทันหันหรือระบบขัดข้อง พวกมันแข็งแกร่ง แต่ก็ไม่สามารถอยู่ยงคงกระพันได้ หากตารางภายในของพวกเขาถูกรบกวน พวกเขาจะสูญเสียการติดตามว่าแต่ละไฟล์อยู่ที่ไหนในไดรฟ์ ขนาดใด ชื่ออะไร และการตั้งค่าการอนุญาตไฟล์ใดบ้าง
คำสั่ง fsck
ให้คุณตรวจสอบว่าระบบไฟล์ของคุณแข็งแรงหรือไม่ หากพบปัญหาใด ๆ ก็สามารถแก้ไขปัญหาเหล่านี้ให้คุณได้เช่นกัน
ทำการตรวจสอบ Preflight
การใช้ fsck
ต้องใช้สิทธิ์ sudo คำสั่งใดๆ ที่สามารถเปลี่ยนแปลงระบบไฟล์ได้จะต้องได้รับการปฏิบัติด้วยความระมัดระวังและจำกัดเฉพาะผู้ที่รู้ว่ากำลังทำอะไรอยู่
นักบินไม่กระโดดขึ้นไปบนเครื่องบิน สตาร์ทเครื่องแล้วบินออกไปที่โน้นสีฟ้าอ่อน พวกเขาทำการตรวจสอบก่อนเที่ยวบิน มีความเสี่ยงมากเกินไปที่จะทำอย่างอื่น นั่นเป็นนิสัยที่ดีในการพัฒนา ก่อนที่คุณจะใช้ fsck
คุณต้องแน่ใจว่าคุณจะใช้งานบนไดรฟ์ที่ถูกต้อง ดังนั้นก่อนที่จะทำอะไรกับ fsck
เราจะทำการลาดตระเวนสักหน่อย
เราจะเริ่มต้นด้วย fdisk
และไพพ์ less
ในไฟล์. เราไม่ได้ขอข้อมูลเกี่ยวกับพาร์ติชันเฉพาะ โดยใช้ตัวเลือก -l
(รายการ) fdisk
แสดงรายการตารางพาร์ติชั่นบนอุปกรณ์ทั้งหมดที่พบในไฟล์ “/proc/partitions” หากมี
sudo fdisk -l | น้อย
เราสามารถเห็นรายการสำหรับ /dev/sda
และ /dev/sdb
คุณสามารถเลื่อนดูไฟล์เพื่อดูรายการอื่นๆ ที่อาจมีอยู่ในคอมพิวเตอร์ของคุณ
พาร์ติชันบน /dev/sda
แสดงเป็น /dev/sda1
, /dev/sda2
และ /dev/sda3
ดังนั้นเราจึงมีสามพาร์ติชั่นในไดรฟ์แรก เราสามารถดูข้อมูลเพิ่มเติมได้เล็กน้อยโดยใช้คำสั่ง parted
เราจะใช้ตัวเลือก 'print'
เพื่อแสดงตารางพาร์ติชั่นในหน้าต่างเทอร์มินัล
sudo แยก /dev/sda 'พิมพ์'
เราได้รับข้อมูลเพิ่มเติมในครั้งนี้ รวมถึงประเภทของระบบไฟล์ในแต่ละพาร์ติชั่น
รุ่น: ATA VBOX HARDDISK (scsi) ดิสก์ /dev/sda: 34.4GB ขนาดเซกเตอร์ (ตรรกะ/กายภาพ): 512B/512B ตารางพาร์ทิชัน: gpt แฟล็กดิสก์: หมายเลข เริ่มต้น ขนาดสิ้นสุด ชื่อระบบไฟล์ แฟล็ก 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 540MB 538MB fat32 EFI บูตระบบพาร์ติชัน esp 3 540MB 34.4GB 33.8GB ต่อ 4
มีสามไดรฟ์ในคอมพิวเตอร์ทดสอบเครื่องนี้ นี่คือผลลัพธ์สำหรับอีกสองไดรฟ์ /dev/sdb
และ /dev/sdc
โปรดทราบว่าระบบไฟล์เหล่านี้ไม่มีฟิลด์ "ชื่อ"
sudo แยก /dev/sdb 'พิมพ์'
รุ่น: ATA VBOX HARDDISK (scsi) ดิสก์ /dev/sdb: 21.5GB ขนาดเซกเตอร์ (ตรรกะ/กายภาพ): 512B/512B ตารางพาร์ทิชัน: msdos แฟล็กดิสก์: หมายเลข เริ่มต้น สิ้นสุด ขนาด ประเภท ระบบไฟล์ แฟล็ก 1 1049kB 21.5GB 21.5GB ext4 หลัก
sudo แยก /dev/sdc 'พิมพ์'
รุ่น: ATA VBOX HARDDISK (scsi) ดิสก์ /dev/sdc: 21.5GB ขนาดเซกเตอร์ (ตรรกะ/กายภาพ): 512B/512B ตารางพาร์ทิชัน: msdos แฟล็กดิสก์: หมายเลข เริ่มต้น สิ้นสุด ขนาด ประเภท ระบบไฟล์ แฟล็ก 1 1049kB 21.5GB 21.5GB ext3 หลัก
ไดรฟ์ที่สองและสามมีขนาดเท่ากัน และแต่ละไดรฟ์มีพาร์ติชันเดียว แต่ระบบไฟล์ในไดรฟ์ที่สองคือ ext4
และระบบไฟล์ในไดรฟ์ที่สามเป็น ext3
ที่เก่ากว่า
เราส่งตัวระบุพาร์ติชั่นไปที่ fsck
และจะตรวจสอบระบบไฟล์บนพาร์ติชั่นนั้น แต่เราไม่สามารถเรียกใช้ fsck
บนระบบไฟล์ที่ติดตั้งได้ เราต้อง unmount ไดรฟ์ ในการทำเช่นนั้น เราจำเป็นต้องทราบจุดเชื่อมต่อที่พาร์ติชั่น—และด้วยเหตุนี้ระบบไฟล์—ถูกเมาต์อยู่
เราสามารถค้นหาได้อย่างง่ายดายโดยใช้คำสั่ง df
df /dev/sdb1
df /dev/sdc1
การใช้คำสั่ง fsck
เรามีข้อมูลทั้งหมดที่เราต้องการ สิ่งแรกที่เราจะทำคือ unmount ระบบไฟล์ที่เราจะตรวจสอบ เราจะทำงานกับระบบไฟล์ในพาร์ติชั่นแรกและอย่างเดียวของ /dev/sdb
ซึ่งก็คือ /dev/sdb1
เราเห็นก่อนหน้านี้ว่านี่คือระบบไฟล์ ext4
และติดตั้งที่ “/run/mount/dave/sata2”
เราจะใช้คำสั่ง umount
โปรดทราบว่าไม่มี "n" ใน "umount"
sudo umount /run/mount/dave/sata2
ด้วย umount
ไม่มีข่าวใดเป็นข่าวดี หากคุณกลับมาที่พรอมต์คำสั่งแบบเงียบ ๆ เราพร้อมแล้ว
sudo fsck /dev/sdb1
ระบบไฟล์นี้มีรายงานว่าสะอาด นั่นหมายความว่าระบบไฟล์กำลังรายงานว่าไม่มีข้อผิดพลาดหรือปัญหา การตรวจสอบระบบไฟล์ที่ละเอียดยิ่งขึ้นไม่ได้ดำเนินการโดยอัตโนมัติ เรายังสามารถดูโค้ดส่งคืนที่ fsck
ส่งคืนให้กับเชลล์ได้
เสียงสะท้อน $?
ค่าที่ส่งกลับเป็นศูนย์บ่งชี้ว่าไม่มีข้อผิดพลาด รหัสส่งคืนที่เป็นไปได้คือ:
- 0 : ไม่มีข้อผิดพลาด
- 1 : แก้ไขข้อผิดพลาดของระบบไฟล์
- 2 : ระบบควรรีบูต
- 4 : ข้อผิดพลาดของระบบไฟล์ไม่ถูกแก้ไข
- 8 : ข้อผิดพลาดในการทำงาน
- 16 : การใช้หรือข้อผิดพลาดทางไวยากรณ์
- 32 : การตรวจสอบถูกยกเลิกโดยคำขอของผู้ใช้
- 128 : ข้อผิดพลาดของไลบรารีที่ใช้ร่วมกัน
แม้ว่าระบบไฟล์จะถูกรายงานว่าสะอาด เราสามารถบังคับให้มีการตรวจสอบระบบไฟล์โดยใช้ตัวเลือก -f
(บังคับ)
sudo fsck /dev/sdb1 -f
คราวนี้ การตรวจสอบใช้เวลานานกว่าจะเสร็จสมบูรณ์ แต่จะทำการทดสอบระบบไฟล์อย่างละเอียดยิ่งขึ้น ระบบไฟล์ของเราสะอาดจริงๆ และไม่มีการรายงานข้อผิดพลาด หากพบปัญหาขณะทำการทดสอบ คุณจะได้รับแจ้งให้ให้ fsck
แก้ไขปัญหาหรือเพิกเฉยต่อข้อผิดพลาด
เมื่อคุณทำการทดสอบเสร็จแล้ว คุณต้องเมานต์ระบบไฟล์อีกครั้ง วิธีที่ง่ายที่สุดในการทำเช่นนี้คือใช้การ mount
นต์ด้วยตัวเลือก -a
(ทั้งหมด) การดำเนินการนี้จะตรวจสอบ “/etc/fstab” สำหรับรายการระบบไฟล์ และทำให้แน่ใจว่าระบบติดตั้งทั้งหมดเหมือนกับการบู๊ตตามปกติ
sudo mount -a
โปรดทราบว่าเราไม่จำเป็นต้องบอก fsck
ว่าระบบไฟล์ประเภทใดที่อยู่ในพาร์ติชั่น ยูทิลิตี้กำหนดว่าโดยการตรวจสอบระบบไฟล์ นั่นหมายความว่าเราสามารถบังคับให้ตรวจสอบระบบไฟล์ได้ /dev/sdc1
ระบบไฟล์ ext3
บนพีซีทดสอบของเรา โดยใช้คำสั่งเดียวกันกับที่เราใช้กับ /dev/sdb1
ซึ่งเป็นพาร์ติชั่น ext4
sudo fsck /dev/sdc1 -f
คุณอาจไม่ต้องการดำดิ่งลงไปในการแก้ไขระบบไฟล์โดยตรง คุณอาจต้องการดูก่อนที่จะกระโดด คุณสามารถขอให้ fsck
ไม่เสนอให้แก้ไขใดๆ และเพียงแค่รายงานปัญหาไปที่หน้าต่างเทอร์มินัล ตัวเลือก -N
(dry run) ทำอย่างนั้น:
sudo fsck -N /dev/sdb1
สิ่งที่ตรงกันข้ามคือการบอก fsck
ว่าไม่ต้องรบกวนการแจ้งหากพบข้อผิดพลาดใดๆ และให้ดำเนินการแก้ไขต่อไป ในการดำเนินการนี้ ให้ใช้ตัวเลือก -y
(ไม่มีข้อความแจ้ง)
sudo fsck -y /dev/sdb1
การใช้ fsck บนรูทพาร์ติชั่น
คุณไม่สามารถใช้ fsck
บนพาร์ติชั่นที่เมาต์ได้ แต่ในการบูตเครื่องคอมพิวเตอร์ของคุณ พาร์ติชั่นรูทจะต้องถูกเมาต์ แล้วเราจะรัน fsck
บนพาร์ติชั่นรูทได้อย่างไร? คำตอบคือการขัดจังหวะกระบวนการบู๊ตและเรียกใช้ fsck
ในโหมดการกู้คืน
ขณะที่คอมพิวเตอร์กำลังบูท ให้กดปุ่ม "Shift" ค้างไว้ หากคุณตั้งเวลาไว้ถูกต้อง คุณจะไม่สามารถบูตเข้าสู่ Linux ได้ กระบวนการบู๊ตจะหยุดที่เมนูขาวดำ เครื่องทดสอบที่ใช้สำหรับบทความนี้ใช้ Ubuntu แต่รุ่นอื่นๆ มีเมนูประเภทเดียวกัน แม้ว่าหน้าตาอาจแตกต่างกันไป ที่หน้าจอระบุว่า "Ubuntu" จะมีชื่อการแจกจ่ายของคุณ
ย้ายแถบไฮไลท์ด้วยปุ่ม "ลูกศรขึ้น" และ "ลูกศรลง" เพื่อเลือกรายการเมนู "ตัวเลือกขั้นสูงสำหรับ Ubuntu" กด "Enter" เพื่อไปยังหน้าจอถัดไป
เลือกตัวเลือกที่ลงท้ายด้วย “(โหมดการกู้คืน)” ในตัวอย่างของเราคือ “Ubuntu พร้อม Linux 5.11.0-20-generic (โหมดการกู้คืน)” กดปุ่ม "Enter"
คุณจะเห็นเมนูการกู้คืน เลือก "fsck ตรวจสอบระบบไฟล์ทั้งหมด" แล้วกดปุ่ม "Tab" เพื่อย้ายไฮไลต์ไปที่ปุ่ม "ตกลง" กดปุ่มตกลง."
คุณจะเห็นการแจ้งเตือนว่าพาร์ติชั่นรูทจะถูกเมาท์พร้อมกับพาร์ติชั่นอื่นๆ ที่กำหนดไว้ในไฟล์ “/etc/fstab” ของคุณ
กดปุ่ม "Tab" เพื่อย้ายไฮไลท์ไปที่ปุ่ม "ใช่" แล้วกด "Enter"
คุณจะเห็น fsck
ทำงานในโหมดโต้ตอบ หากมีปัญหา คุณจะได้รับแจ้งให้ให้ fsck
แก้ไขหรือเพิกเฉย เมื่อระบบไฟล์ได้รับการตรวจสอบแล้ว คุณจะเห็นเมนูการกู้คืนอีกครั้ง
เลือกตัวเลือก "ดำเนินการต่อ" กดปุ่ม "Tab" เพื่อย้ายไฮไลต์ไปที่ปุ่ม "ตกลง" แล้วกด "Enter" กระบวนการบูตจะเริ่มทำงานต่อ และคุณจะบูตเข้าสู่ Linux
การบูตโหมดการกู้คืนอาจส่งผลต่อไดรเวอร์บางตัว ดังนั้น เป็นการดีที่จะรีบูตอีกครั้งทันทีที่คุณบูตเข้าสู่ Linux เพื่อให้แน่ใจว่าคอมพิวเตอร์ของคุณทำงานในลักษณะมาตรฐาน
เมื่อสิ่งต่าง ๆ ผิดพลาด
ตาข่ายนิรภัยมีไว้เพื่อเหตุผล ทำความรู้จักกับคำสั่ง fsck
ถ้าวันหนึ่งจำเป็นต้องใช้มันด้วยความโกรธ คุณจะดีใจที่ได้ทำความคุ้นเคยล่วงหน้า
คำสั่งลินุกซ์ | ||
ไฟล์ | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · เข้าร่วม · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · ดู · strings · พิมพ์ · เปลี่ยนชื่อ · zip · unzip · เมานต์ · umount · ติดตั้ง · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · แพทช์ · แปลง · rclone · ฉีก · srm | |
กระบวนการ | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · หมดเวลา · ผนัง · ใช่ · ฆ่า · หลับ · sudo · su · เวลา · groupadd · usermod · กลุ่ม · lshw · ปิดระบบ · รีบูต · หยุด · poweroff · passwd · lscpu · crontab · วันที่ · bg · fg | |
ระบบเครือข่าย | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ