การเพิ่มหมายเลขเป็นเรื่องง่าย ปัญหาคือมีตัวเลขที่แตกต่างกันมากมายที่จะเพิ่ม
ไฟล์ใช้พื้นที่ดิสก์เท่าไร
แนวคิดพื้นฐานคือไฟล์ที่มี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
tune2fs
ต้องมีการเข้าถึงแบบอ่านไปยังอุปกรณ์บล็อกที่มีระบบไฟล์ซึ่งโดยทั่วไปแล้วจะต้องเป็นรูทตั้งแต่นั้นทำให้คุณสามารถอ่านเนื้อหาของไฟล์ใด ๆ