เหตุใดจึงมีวิธีการวัดการใช้ดิสก์ที่แตกต่างกันมากมาย


114

เมื่อฉันสรุปขนาดไฟล์ของฉันฉันจะได้รูปหนึ่ง ถ้าฉันวิ่งduฉันจะได้ตัวเลขอื่น ถ้าฉันเรียกใช้duไฟล์ทั้งหมดในพาร์ติชันของฉันมันไม่ตรงกับที่ใช้ในการdfอ้างสิทธิ์ เหตุใดจึงมีตัวเลขต่าง ๆ มากมายสำหรับขนาดรวมของไฟล์ของฉัน คอมพิวเตอร์เพิ่มไม่ได้ใช่ไหม

การพูดของการเพิ่ม: เมื่อฉันเพิ่มคอลัมน์ "ใช้แล้ว" และ "พร้อมใช้งาน" ของdfฉันจะไม่ได้ตัวเลขทั้งหมด และตัวเลขทั้งหมดนั้นเล็กกว่าขนาดพาร์ติชันของฉัน และถ้าฉันเพิ่มขนาดพาร์ติชันของฉันฉันจะไม่ได้ขนาดดิสก์ของฉัน! สิ่งที่ช่วยให้?

คำตอบ:


144

การเพิ่มหมายเลขเป็นเรื่องง่าย ปัญหาคือมีตัวเลขที่แตกต่างกันมากมายที่จะเพิ่ม

ไฟล์ใช้พื้นที่ดิสก์เท่าไร

แนวคิดพื้นฐานคือไฟล์ที่มีnไบต์ใช้พื้นที่ดิสก์nไบต์รวมทั้งบิตสำหรับข้อมูลการควบคุมบางส่วน: ข้อมูลเมตาของไฟล์ (สิทธิ์การประทับเวลา ฯลฯ ) และค่าใช้จ่ายเล็กน้อยสำหรับข้อมูลที่ระบบต้องการ ค้นหาที่จัดเก็บไฟล์ อย่างไรก็ตามมีภาวะแทรกซ้อนมากมาย

ภาวะแทรกซ้อนทางกล้องจุลทรรศน์

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

จะเป็นบิตทางเทคนิคเพิ่มเติมในระบบแฟ้มง่ายโดยทั่วไปพื้นที่ที่แบ่งเป็นบล็อก ขนาดบล็อกทั่วไปคือ 4KiB แต่ละไฟล์ใช้จำนวนบล็อกเป็นจำนวนเต็ม เว้นแต่ว่าขนาดไฟล์จะเป็นขนาดบล็อกหลายเท่าบล็อกสุดท้ายจะใช้เพียงบางส่วนเท่านั้น ดังนั้นไฟล์ 1 ไบต์และไฟล์ 4096- ไบต์ทั้งคู่ใช้เวลา 1 บล็อกในขณะที่ไฟล์ 4097- ไบต์ใช้เวลาสองบล็อก คุณสามารถสังเกตสิ่งนี้ได้ด้วยduคำสั่ง: หากระบบไฟล์ของคุณมีขนาดบล็อก 4KiB จากนั้นduจะรายงาน 4KiB สำหรับไฟล์ขนาด 1 ไบต์

หากไฟล์มีขนาดใหญ่จำเป็นต้องใช้บล็อกเพิ่มเติมเพื่อเก็บรายการบล็อกที่ประกอบเป็นไฟล์ (นี่คือบล็อกทางอ้อมระบบไฟล์ที่ซับซ้อนกว่านี้อาจปรับให้เหมาะสมในรูปแบบของขอบเขต ) ที่ไม่แสดงในขนาดไฟล์ตามที่รายงานโดยls -lหรือ GNU du --apparent-size; duซึ่งรายงานการใช้งานดิสก์เมื่อเทียบกับขนาด

filesystems บางคนพยายามที่จะนำมาใช้พื้นที่ว่างที่เหลืออยู่ในบล็อกสุดท้ายที่จะแพ็คหางไฟล์หลายแห่งในบล็อกเดียวกัน ระบบไฟล์บางระบบ (เช่นext4 เนื่องจาก Linux 3.8ใช้ 0 บล็อกสำหรับไฟล์เล็ก ๆ (เพียงไม่กี่ไบต์) ที่พอดีกับ inode

ภาวะแทรกซ้อนระดับมหภาค

โดยทั่วไปตามที่เห็นข้างต้นขนาดรวมทั้งหมดที่รายงานโดยduคือผลรวมของขนาดของบล็อกหรือส่วนขยายที่ใช้โดยไฟล์

ขนาดที่รายงานโดยduอาจเล็กลงหากไฟล์ถูกบีบอัด ตามปกติแล้วระบบยูนิกซ์สนับสนุนรูปแบบการบีบอัดแบบหยาบ: หากบล็อกไฟล์มีเพียง null ไบต์จากนั้นแทนที่จะเก็บบล็อกเป็นศูนย์ระบบไฟล์สามารถตัดการบล็อกนั้นโดยสิ้นเชิง ไฟล์ที่มีบล็อกละเว้นเช่นนี้จะเรียกว่าเป็นไฟล์เบาบาง ไฟล์ที่กระจัดกระจายจะไม่สร้างขึ้นโดยอัตโนมัติเมื่อไฟล์มีชุดข้อมูลขนาดใหญ่เป็นโมฆะแอปพลิเคชันจะต้องจัดเรียงไฟล์ให้กระจัดกระจาย

filesystems บางอย่างเช่นbtrfsและZFSสนับสนุนวัตถุประสงค์ทั่วไปการบีบอัด

ภาวะแทรกซ้อนขั้นสูง

คุณสมบัติหลักสองประการของระบบไฟล์ที่ทันสมัยมากเช่น zfs และ btrfs ทำให้ความสัมพันธ์ระหว่างขนาดไฟล์และการใช้งานดิสก์นั้นอยู่ไกลมากขึ้นอย่างมากนั่นคือ snapshot และการขจัดข้อมูลซ้ำซ้อน

Snapshotsเป็นสถานะแช่แข็งของระบบไฟล์ ณ วันที่กำหนด ระบบไฟล์ที่รองรับคุณสมบัตินี้สามารถมีหลายสแนปชอตที่ถ่ายในวันที่แตกต่างกัน ภาพรวมเหล่านี้แน่นอน ในระดับสูงสุดหากคุณลบไฟล์ทั้งหมดออกจากระบบไฟล์เวอร์ชันที่ใช้งานอยู่ระบบไฟล์จะไม่ว่างเปล่าหากมีสแนปชอตที่เหลืออยู่

ไฟล์หรือบล็อกใด ๆ ที่ไม่ได้เปลี่ยนแปลงตั้งแต่สแน็ปช็อตหรือระหว่างสแน็ปช็อตสองรายการนั้นมีอยู่ในสแนปชอตและในเวอร์ชันที่ใช้งานอยู่หรือสแน็ปช็อตอื่น ๆ นี้จะดำเนินการผ่านทางสำเนาเมื่อเขียน ในบางกรณีขอบอาจเป็นไปได้ว่าการลบไฟล์ในระบบไฟล์แบบเต็มจะล้มเหลวเนื่องจากพื้นที่ว่างไม่เพียงพอ - เนื่องจากการลบไฟล์นั้นจะต้องทำการคัดลอกบล็อกในไดเรกทอรีและไม่มีที่ว่างแม้แต่บล็อกเดียว

การทำสำเนาเป็นเทคนิคการเพิ่มประสิทธิภาพการจัดเก็บที่ประกอบด้วยการหลีกเลี่ยงการจัดเก็บบล็อกที่เหมือนกัน ด้วยข้อมูลทั่วไปการค้นหาสิ่งที่ซ้ำซ้อนไม่คุ้มค่ากับความพยายามเสมอไป ทั้ง zfsและ btrfsรองรับการขจัดข้อมูลซ้ำซ้อนเป็นคุณสมบัติเสริม

ทำไมยอดรวมduต่างจากผลรวมของขนาดไฟล์

ดังที่เราได้เห็นด้านบนขนาดปกติที่รายงานโดยduสำหรับแต่ละไฟล์นั้นมักจะเป็นผลรวมของขนาดของบล็อกหรือส่วนขยายที่ใช้โดยไฟล์ โปรดทราบว่าโดยค่าเริ่มต้นls -lรายการขนาดเป็นไบต์ แต่duแสดงขนาดเป็น KiB หรือในหน่วย 512- ไบต์ (ส่วน) ในระบบดั้งเดิมบางระบบ ( du -kบังคับให้ใช้กิโลไบต์) ยูนิโค้ดสมัยใหม่ส่วนใหญ่รองรับls -lhและdu -hใช้ตัวเลข "อ่านง่าย" โดยใช้ K, M, G และอื่น ๆ พอเพียง (สำหรับ KiB, MiB, GiB) ตามความเหมาะสม

เมื่อคุณเรียกใช้duในไดเรกทอรีจะสรุปการใช้งานดิสก์ของไฟล์ทั้งหมดในแผนผังไดเรกทอรีรวมถึงไดเรกทอรีด้วยตนเอง ไดเรกทอรีประกอบด้วยข้อมูล (ชื่อของไฟล์และตัวชี้ไปยังตำแหน่งของข้อมูลเมตาของไฟล์) ดังนั้นจึงจำเป็นต้องมีพื้นที่เก็บข้อมูลเล็กน้อย ไดเรกทอรีขนาดเล็กจะใช้เวลาหนึ่งบล็อกไดเรกทอรีขนาดใหญ่จะต้องใช้บล็อกมากขึ้น จำนวนที่เก็บข้อมูลที่ใช้โดยไดเรกทอรีบางครั้งไม่เพียง แต่ขึ้นอยู่กับไฟล์ที่บรรจุอยู่ แต่ยังรวมถึงลำดับที่ถูกแทรกและไฟล์บางไฟล์จะถูกลบออก (ด้วยระบบไฟล์บางระบบสิ่งนี้อาจทำให้เกิดช่องว่าง - เป็นการประนีประนอมระหว่างพื้นที่ดิสก์และประสิทธิภาพ ) แต่ความแตกต่างจะเล็กมาก (บล็อกเพิ่มเติมตรงนี้และตรงนั้น) เมื่อคุณวิ่งls -ld /some/directoryขนาดของไดเรกทอรีจะแสดงรายการ (โปรดทราบว่าบรรทัด“ total NNN” ที่ด้านบนของผลลัพธ์จากls -lเป็นตัวเลขที่ไม่เกี่ยวข้องมันคือผลรวมของขนาดในบล็อกของรายการที่แสดงในหน่วย KiB หรือภาค)

โปรดทราบว่าduมีไฟล์จุดที่lsไม่แสดงเว้นแต่คุณจะใช้-Aหรือ-aตัวเลือก

บางครั้งduรายงานน้อยกว่าผลรวมที่คาดหวัง สิ่งนี้จะเกิดขึ้นหากมีฮาร์ดลิงก์ภายในแผนผังไดเร็กทอรี: duนับแต่ละไฟล์เพียงครั้งเดียว

ในบางระบบไฟล์เช่นZFSบน Linux duจะไม่รายงานพื้นที่ดิสก์เต็มที่ครอบครองโดยคุณสมบัติเพิ่มเติมของไฟล์

ระวังว่าถ้ามีจุดเชื่อมต่ออยู่ใต้ไดเรกทอรีduจะนับไฟล์ทั้งหมดในจุดเชื่อมต่อเหล่านี้ด้วยเว้นแต่จะได้รับ-xตัวเลือก ดังนั้นถ้าเช่นคุณต้องการขนาดรวมของไฟล์ในระบบแฟ้มรากของคุณทำงานไม่ได้du -x /du /

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

ไฟล์ที่ถูกลบ

เมื่อไฟล์ถูกลบสิ่งนี้จะลบรายการไดเรกทอรีเท่านั้นไม่จำเป็นต้องเป็นไฟล์เอง มีเงื่อนไขสองประการที่จำเป็นในการลบไฟล์และเรียกคืนพื้นที่ดิสก์จริง:

  • จำนวนลิงค์ของไฟล์จะต้องลดลงเหลือ 0: หากไฟล์มีลิงค์ยากหลายลิงค์การลบจะไม่มีผลกับลิงค์อื่น
  • ตราบใดที่ไฟล์เปิดโดยบางกระบวนการข้อมูลก็จะยังคงอยู่ เฉพาะเมื่อกระบวนการทั้งหมดได้ปิดไฟล์เป็นไฟล์ที่ถูกลบ เอาต์พุตfuser -mหรือlsofจุดเชื่อมต่อรวมถึงกระบวนการที่มีไฟล์เปิดอยู่บนระบบไฟล์นั้นแม้ว่าไฟล์นั้นจะถูกลบ
  • แม้ว่ากระบวนการไม่ได้เปิดไฟล์ที่ถูกลบพื้นที่ของไฟล์อาจไม่สามารถเรียกคืนได้หากไฟล์นั้นเป็นแบ็คเอนด์ของloopอุปกรณ์ losetup -a(as root) สามารถบอกคุณได้ว่าloopอุปกรณ์ใดบ้างที่ติดตั้งอยู่ในปัจจุบันและในไฟล์ใด อุปกรณ์วนซ้ำต้องถูกทำลาย (พร้อมlosetup -d) ก่อนจึงจะสามารถเรียกคืนพื้นที่ดิสก์ได้

หากคุณลบไฟล์ในตัวจัดการไฟล์หรือสภาพแวดล้อม GUI บางอย่างไฟล์นั้นอาจถูกนำไปไว้ในพื้นที่ถังขยะซึ่งสามารถลบทิ้งได้ ตราบใดที่ไฟล์นั้นไม่สามารถลบได้ก็จะยังคงใช้พื้นที่ในนั้น

ตัวเลขเหล่านี้มาจากdfอะไรกันแน่?

ระบบไฟล์ทั่วไปประกอบด้วย:

  • บล็อกที่มีข้อมูลไฟล์ (รวมถึงไดเรกทอรี) และข้อมูลเมตาบางส่วน (รวมถึงบล็อกทางอ้อมและแอตทริบิวต์เพิ่มเติมในระบบไฟล์บางระบบ)
  • บล็อกฟรี
  • บล็อกที่สงวนไว้สำหรับผู้ใช้รูท
  • ซุปเปอร์บล็อกและข้อมูลการควบคุมอื่น ๆ
  • inodes
  • วารสาร

มีการรายงานเฉพาะชนิดแรกduเท่านั้น เมื่อพูดถึงdfอะไรคอลัมน์ "ใช้แล้ว" "พร้อมใช้งาน" และผลรวมจะขึ้นอยู่กับระบบไฟล์ (ของหลักสูตรที่ใช้บล็อก (รวมถึงบล็อกทางอ้อม) อยู่ในคอลัมน์ "ใช้แล้ว" และบล็อกที่ไม่ได้ใช้จะอยู่ใน " คอลัมน์” ที่มีอยู่)

ระบบไฟล์ใน ext2 / ext3 / ext4 สำรอง 5% ของพื้นที่ให้กับผู้ใช้รูท สิ่งนี้มีประโยชน์ในระบบไฟล์รูทเพื่อให้ระบบทำงานต่อไปหากระบบเติมเต็ม (โดยเฉพาะอย่างยิ่งสำหรับการบันทึกและเพื่อให้ผู้ดูแลระบบจัดเก็บข้อมูลเล็กน้อยในขณะที่แก้ไขปัญหา) แม้สำหรับพาร์ติชั่นข้อมูลเช่น/homeการรักษาพื้นที่ที่สงวนไว้นั้นมีประโยชน์เพราะระบบไฟล์เกือบเต็มมีแนวโน้มที่จะกระจายตัว Linux พยายามหลีกเลี่ยงการแตกแฟรกเมนต์ (ซึ่งทำให้การเข้าถึงไฟล์ช้าลงโดยเฉพาะอย่างยิ่งในการหมุนอุปกรณ์เชิงกลเช่นฮาร์ดดิสก์) โดยการจัดสรรบล็อกต่อเนื่องจำนวนมากไว้ล่วงหน้าเมื่อไฟล์ถูกเขียน แต่ถ้าไม่มีบล็อกต่อเนื่องจำนวนมาก .

ระบบไฟล์ดั้งเดิมจนถึงและรวมถึง ext4 แต่ไม่ใช่ btrfs สำรองจำนวนinodes ที่แน่นอนเมื่อสร้างระบบไฟล์ สิ่งนี้ทำให้การออกแบบระบบไฟล์ง่ายขึ้นอย่างมีนัยสำคัญ แต่มีข้อเสียที่จำนวนของ inodes จะต้องมีการปรับขนาดอย่างถูกต้อง: ด้วย inodes มากเกินไปเนื้อที่จะสูญเปล่า ที่มี inodes น้อยเกินไประบบไฟล์อาจไม่ทำงานกับ inodes ก่อนที่จะมีที่ว่าง คำสั่งdf -iรายงานจำนวนของ inodes ที่ใช้งานอยู่และจำนวนที่มีอยู่ (ระบบไฟล์ที่แนวคิดไม่สามารถใช้ได้อาจรายงาน 0)

การรันtune2fs -lบนโวลุ่มที่มีระบบไฟล์ ext2 / ext3 / ext4 จะรายงานสถิติบางอย่างรวมถึงจำนวนทั้งหมดและจำนวนของ inode และบล็อกว่าง

คุณสมบัติอื่นที่สามารถสร้างความสับสนให้กับสสารคือsubvolumes (รองรับในbtrfsและใน zfs ภายใต้ชื่อชุดข้อมูล ) subvolumes หลายรายการใช้พื้นที่เดียวกัน แต่มีรากต้นไม้ไดเรกทอรีแยกต่างหาก

หากระบบไฟล์ถูกเมาท์ผ่านเครือข่าย (NFS, Samba ฯลฯ ) และเซิร์ฟเวอร์ส่งออกส่วนหนึ่งของระบบไฟล์นั้น (เช่นเซิร์ฟเวอร์มี/homeระบบไฟล์และการส่งออก/home/bob ) จากนั้นdfบนไคลเอนต์จะแสดงข้อมูลสำหรับระบบไฟล์ทั้งหมดไม่ใช่ เฉพาะส่วนที่ส่งออกและติดตั้งบนไคลเอนต์

การใช้พื้นที่บนดิสก์ของฉันคืออะไร

ดังที่เราได้เห็นด้านบนขนาดรวมที่รายงานโดยdfไม่ได้คำนึงถึงข้อมูลการควบคุมทั้งหมดของระบบไฟล์เสมอไป ใช้เครื่องมือเฉพาะระบบไฟล์เพื่อให้ได้ขนาดที่แน่นอนของระบบไฟล์หากจำเป็น ตัวอย่างเช่นด้วย ext2 / ext3 / ext4 ให้เรียกใช้tune2fs -lและคูณขนาดบล็อกด้วยจำนวนบล็อก

เมื่อคุณสร้างระบบไฟล์โดยปกติจะเติมพื้นที่ว่างบนพาร์ติชันหรือโวลุ่มที่ล้อมรอบ บางครั้งคุณอาจท้ายด้วยระบบไฟล์ขนาดเล็กเมื่อคุณย้ายระบบไฟล์ไปรอบ ๆ หรือปรับขนาดไดรฟ์

บน Linux lsblkแสดงภาพรวมที่ดีของปริมาณหน่วยเก็บข้อมูลที่มีอยู่ สำหรับข้อมูลเพิ่มเติมหรือหากคุณไม่มีlsblkให้ใช้การจัดการปริมาณพิเศษหรือเครื่องมือการแบ่งพาร์ติชันเพื่อตรวจสอบพาร์ติชันที่คุณมี บน Linux มีlvs, vgs, pvsสำหรับLVM , fdiskสำหรับเครื่องคอมพิวเตอร์แบบดั้งเดิมสไตล์ (“MBR”) พาร์ทิชัน (เช่นเดียวกับ GPT บนระบบล่าสุด) gdiskสำหรับGPTพาร์ทิชันdisklabelสำหรับ disklabels BSD, แยกฯลฯ ภายใต้ลินุกซ์cat /proc/partitionsจะช่วยให้สรุปอย่างรวดเร็ว การติดตั้งแบบปกติจะมีพาร์ติชั่นหรือไดรฟ์ข้อมูลอย่างน้อยสองพาร์ติชั่นที่ใช้โดยระบบปฏิบัติการ: ระบบไฟล์ (บางครั้งมากกว่า) และสว็อปโวลุ่ม

คอมพิวเตอร์บางเครื่องมีพาร์ติชันที่ประกอบด้วยBIOSหรือซอฟต์แวร์การวินิจฉัยอื่น ๆ คอมพิวเตอร์ที่มีUEFIจะมีพาร์ติชัน bootloader เฉพาะ

ท้ายที่สุดโปรดทราบว่าโปรแกรมคอมพิวเตอร์ส่วนใหญ่ใช้หน่วยตามกำลังของ 1024 = 2 10 (เพราะโปรแกรมเมอร์ชอบไบนารีและพลังของ 2) ดังนั้น 1 kB = 1024 B, 1 MB = 1048576 B, 1 GB = 1073741824, 1 TB = 1099511627776 B, …อย่างเป็นทางการหน่วยเหล่านี้เรียกว่าkibibyte KiB, mebibyte MiB เป็นต้น แต่ซอฟต์แวร์ส่วนใหญ่รายงานเพียง k หรือ kB, M หรือ MB เป็นต้นในทางกลับกันผู้ผลิตฮาร์ดดิสก์ใช้ระบบเมตริก (หน่วยที่ใช้ 1,000) ดังนั้นไดรฟ์ 1 TB เพียง 931 GiB หรือ 0.904 TiB


1
@Kiwy tune2fsต้องมีการเข้าถึงแบบอ่านไปยังอุปกรณ์บล็อกที่มีระบบไฟล์ซึ่งโดยทั่วไปแล้วจะต้องเป็นรูทตั้งแต่นั้นทำให้คุณสามารถอ่านเนื้อหาของไฟล์ใด ๆ
Gilles

21
ฉันรู้ว่า 'ขอบคุณ' หมดกำลังใจใน SE แต่ Gilles คุณสมควรได้รับ 'ขอบคุณ' มากสำหรับโพสต์ที่ยอดเยี่ยมนี้
dotancohen

1
ฉันจำได้ว่าเห็นแคตตาล็อกการ์ดเมื่อฉันเป็นเช่น 6 ฉันสงสัยว่าหลายคนจะไม่รู้ว่าพวกเขาคืออะไร?
Izkata

1
@ illuminÉนั่นมันโซลาริสที่สูงเกินไปสำหรับฉันฉันไม่รู้ว่ามันเหมาะกับระดับไหน
Gilles

1
du ไม่บัญชีสำหรับบล็อกทางอ้อม ls -lนั่นคือความแตกต่างหลักจากขนาดของไฟล์ที่รายงานโดย
Stéphane Chazelas

4

ข้อมูลสรุปโดยย่อของภาวะแทรกซ้อนในการคำนวณขนาดไฟล์และพื้นที่ดิสก์:

  • พื้นที่ที่ไฟล์ใช้บนดิสก์คือตัวคูณของจำนวนบล็อกที่ใช้เทียบกับขนาดของแต่ละบล็อก + จำนวนของ inode ที่ใช้ ไฟล์ยาว 1 ไบต์จะใช้เวลาอย่างน้อย 1 บล็อก, 1 ไอโหนดและหนึ่งรายการไดเรกทอรี

    แต่อาจใช้รายการไดเรกทอรีเพิ่มเติมเพียง 1 รายการหากไฟล์นั้นเป็นฮาร์ดลิงก์ไปยังไฟล์อื่น มันจะเป็นเพียงการอ้างอิงถึงบล็อกชุดเดียวกันอีกชุดหนึ่ง

  • ขนาดของเนื้อหาของไฟล์ นี่คือสิ่งที่lsแสดง
  • พื้นที่ว่างในดิสก์ไม่ใช่ขนาดของไฟล์ที่ใหญ่ที่สุดที่คุณสามารถใส่ได้หรือผลรวมของขนาดเนื้อหาไฟล์ทั้งหมดที่จะพอดีกับดิสก์ มันอยู่ที่ไหนสักแห่งระหว่าง ขึ้นอยู่กับจำนวนไฟล์ (การใช้ไอโหนด) ขนาดบล็อกและความใกล้ชิดของเนื้อหาในไฟล์แต่ละไฟล์อย่างสมบูรณ์

นี่เป็นเพียงการขีดข่วนพื้นผิวของระบบไฟล์และมันง่ายเกินไป ยังจำได้ว่าระบบไฟล์ที่แตกต่างกันทำงานแตกต่างกัน

statมีประโยชน์มากในการตรวจพบข้อมูลนี้ นี่คือตัวอย่างของวิธีใช้สถิติและสิ่งที่ดีสำหรับ: http://landoflinux.com/linux_stat_command_examples.html


1
โดยปกติแล้วไฟล์ 1 ไบต์จะใช้เวลาหนึ่งบล็อกไม่ใช่ 8 การสร้างฮาร์ดลิงก์จะไม่สร้าง inode เลย: ไฟล์เดียวคือหนึ่ง inode ไม่ว่าจะมีลิงก์จำนวนเท่าใดในไฟล์ การสร้างฮาร์ดลิงก์ต้องใช้พื้นที่สำหรับรายการไดเรกทอรีเท่านั้น
Gilles

ขอบคุณสำหรับการแก้ไขหน่วยความจำของฉันเป็นที่ยอมรับอีกครั้ง: การศึกษา ext2 ในเชิงลึกตอนนี้ค่อนข้างคลุมเครือ ฉันกำลังติดตามผลลัพธ์ของสถิติใหม่: จำนวนบล็อก - มันรู้สึกมากเกินไป แต่นั่นคือสิ่งที่มี ฉันจะแก้ไขคำตอบ
เปโดร

1
นั่นเป็นเพราะ 1 ext2 block = 8 บล็อก stat ถ้าระบบไฟล์ ext2 ใช้บล็อก 4kB: สถิตินับในบล็อก 512 ไบต์เพื่อเหตุผลทางประวัติศาสตร์ ดูunix.stackexchange.com/questions/14409/…
Gilles

3

ฉันจะแสดงให้เห็นถึงกรณีที่แตกต่างกันที่ทำให้เกิดduความแตกต่างจากที่dfนี่

dfนับบล็อกระบบไฟล์ที่จัดสรรให้duใช้ข้อมูลขนาดของแต่ละไฟล์ ความแตกต่างอาจมีหลายสาเหตุ:

1) ไฟล์ Unlinked (ถูกลบ) ที่ยังคงเปิดอยู่โดยแอปพลิเคชัน ข้อมูลไฟล์หายไปบล็อกยังคงจัดสรรอยู่ lsof +aL1 <filesystem>จะช่วยให้คุณระบุกระบวนการ เวลาส่วนใหญ่คุณต้องฆ่ากระบวนการเพื่อเพิ่มพื้นที่ว่าง (ขึ้นอยู่กับกระบวนการบางครั้งการโหลดการกำหนดค่าก็เพียงพอแล้ว)

2) ไฟล์ที่อยู่ใต้ภูเขาจุดซ่อนอยู่แต่ไม่ได้ไปdu สามารถช่วยให้คุณอ่านระบบไฟล์dfdebugfs

$ sudo debugfs 
debugfs 1.42.12 (29-Aug-2014)
debugfs:  open /dev/xxx    (the desired file system  device)
debugfs:  cd /boot
debugfs:  ls -l 
 1966081   40755 (2)      0      0    4096 26-May-2016 16:28 .
      2   40555 (2)      0      0    4096 11-May-2016 10:43 ..
 1974291  100644 (1)      0      0       0 26-May-2016 16:28 bob   <---<<< /boot/bob is hidden by /boot fs

3) ไฟล์กระจัดกระจายที่ดูใหญ่กว่าความเป็นจริง บล็อกที่ไม่ได้รับการจัดสรรจะไม่นับโดยแต่ขนาดไฟล์ที่เห็นได้ชัดคือการนับdfdu

โปรดทราบว่าฮาร์ดลิงก์ไม่ฉลาด du


3

dfโดยทั่วไปจะใช้เพื่อดูว่าระบบไฟล์มีขนาดเต็มรูปแบบอย่างไรและอยู่ที่ไหน มีประโยชน์มากเมื่อคุณมีพื้นที่เหลือน้อยในระบบไฟล์และอาจต้องการเปลี่ยนสิ่งต่าง ๆ ในระบบไฟล์หรือซื้อดิสก์ที่ใหญ่กว่า ฯลฯ

duแสดงรายละเอียดจำนวนพื้นที่เก็บข้อมูลสะสมของแต่ละไดเรกทอรีที่ใช้ไป (เรียงลำดับเหมือนwindirstatใน Windows) เหมาะสำหรับการค้นหาตำแหน่งที่คุณกำลังเพิ่มพื้นที่ว่างเมื่อพยายามทำความสะอาดไฟล์

นอกเหนือจากความแตกต่างของตัวเลขเล็ก ๆ ที่อธิบายโดยคนอื่นฉันคิดว่าduและdfสาธารณูปโภคมีจุดประสงค์ที่แตกต่างกันมาก

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