มีวิธีที่จะทำให้ระบบไฟล์ส่วนขยายใช้พื้นที่น้อยลงสำหรับตัวเองใน Linux หรือไม่?


49

ฉันมี HDD ภายนอกและภายในมากมายที่ฉันใช้บนระบบ Linux ฉันมีระบบ Linux เท่านั้นดังนั้นการใช้ระบบไฟล์ Linux จึงเหมาะสมเท่านั้น อย่างไรก็ตามฉันใช้ NTFS อยู่ทุกหนทุกแห่งเพราะมันทำให้ฉันมีพื้นที่ที่สามารถใช้งานได้มากที่สุดจาก HDD

ตอนนี้ฉันอยากจะเปลี่ยนมาใช้ระบบไฟล์ Linux ส่วนใหญ่เป็นเพราะสิทธิ์และความสามารถในการใช้งานได้ (เช่นฉันไม่สามารถทำให้พาร์ติชัน NTFS ที่เข้ารหัส LUKS ของฉันไม่สามารถปรับขนาดภายใต้ Linux ได้เลยบอก chkdsk ใน Windows)

อย่างไรก็ตามเมื่อฉันฟอร์แมตฮาร์ดดิสก์เหล่านั้นฉันได้ลองใช้ระบบไฟล์ที่แตกต่างกันและทุกระบบไฟล์ Linux แม้กระทั่ง ext2 ซึ่งเท่าที่ฉันรู้ว่าไม่มีการทำเจอร์นัลให้ใช้พื้นที่จำนวนมากสำหรับตัวเอง ฉันไม่จำค่าที่แน่นอน แต่มันเกิน 100GB ที่ NTFS ได้รับฉันมากกว่าบน HDD 2TB ซึ่งมีจำนวนมาก

ดังนั้นคำถามของฉันคือ: มีวิธีที่จะทำให้ระบบไฟล์ ext ใช้พื้นที่น้อยลงสำหรับตัวเอง? หรือมีระบบไฟล์อื่น (ฉันได้ลอง ext2, ext3, ext4, NTFS และ vfat - ไม่มีพวกมันเข้ามาใกล้พื้นที่ใช้งานที่ NTFS เสนอให้ฉัน) ด้วยการสนับสนุน Linux ที่สมบูรณ์แบบและพื้นที่ใช้งานที่ดี?

ฉันชอบที่จะได้ยินเกี่ยวกับวิธีและทำไมระบบไฟล์ (โดยเฉพาะอย่างยิ่ง ext2 ที่ไม่มีการทำเจอร์นัล) ใช้พื้นที่นั้นมากกว่า NTFS และฉันไม่รู้ว่าจะถามที่ไหน ฉันต้องการใช้ ext4 เป็นส่วนใหญ่โดยไม่ต้องทำการเจอร์นัลและอะไรก็ตามที่ใช้พื้นที่มากถ้าเป็นไปได้



4
ฉันมีและมันอธิบายสิ่งที่ใช้พื้นที่เพิ่มขึ้น แต่ความแตกต่างระหว่าง NTFS และ ext นั้นใหญ่กว่าระหว่าง reiserfs และ ext และฉันสงสัยว่าถ้ามีวิธีใดที่จะทำให้มันเล็กลง ตัวอย่างเช่น HDD 1TB ฉันสามารถใช้ 989GB กับ NTFS ext4 จะให้ฉันประมาณ 909GB
ลูกปา

ยุติธรรมพอสมควร คำถามที่มีคุณค่าและคำตอบก็เหมือนกันเช่นกัน
JakeGould

3
คุณวัดขนาดพื้นที่ว่างจริง ๆ ได้อย่างไร สิ่งนี้มีความสำคัญเนื่องจากขึ้นอยู่กับค่าที่คุณดูคุณอาจจะเห็นหรือไม่เห็นผลของการจอง 5% ตามที่ระบุไว้ในคำถามที่เชื่อมโยง
eMBee

2
โปรดทราบว่าการทำเจอร์นัลในระบบไฟล์เช่น ext3 และ ext4 นั้นเป็นสิ่งที่ดี มันค่อนข้างง่ายที่จะสูญเสียพลังงานไปยังไดรฟ์ภายนอกหรือถอดออกโดยไม่ได้ตั้งใจหากเป็น USB เมื่อเกิดเหตุการณ์นี้ขึ้นบ่อยครั้งมันก็ไม่ใช่เรื่องใหญ่อะไรเพราะมันจะรักษาตัวเองโดยใช้สมุดบันทึกเมื่อมันเริ่มสำรอง หากปราศจากเครือข่ายความปลอดภัยนั้นสิ่งต่างๆก็จะยิ่งแย่ลง มันไม่ใช่แค่กรณีที่มากกว่านั้นดีกว่า
โจ

คำตอบ:


97

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

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

จำนวน 5% นั้นถูกตั้งขึ้นในปี 1980 เมื่อดิสก์มีขนาดเล็กกว่ามาก แต่ก็เหลือเพียงเท่านี้ ทุกวันนี้ 1% อาจเพียงพอสำหรับความเสถียรของระบบ

การสำรองสามารถเปลี่ยนแปลงได้โดยใช้-mตัวเลือกของtune2fsคำสั่ง:

tune2fs -m 0 /dev/sda1

สิ่งนี้จะตั้งเปอร์เซ็นต์บล็อกที่สงวนไว้เป็น 0% (0 บล็อก)

เพื่อรับค่าปัจจุบัน (ในหมู่อื่น ๆ ) ใช้คำสั่ง:

tune2fs -l <device> 

10
สิ่งนี้จะอธิบายถึงความแตกต่างอันยิ่งใหญ่ในพื้นที่ใช้งานได้อย่างสมบูรณ์แบบ (เนื่องจาก 5% ของ 2TB เท่ากับ 100GB) ดิสก์จะไม่ใช้สำหรับสิ่งใดก็ตามที่เกี่ยวข้องกับรูทหรือระบบไฟล์ดังนั้นฉันคิดว่ามันจะถูกบันทึกไว้เพื่อปิดใช้งานสิ่งนี้ ฉันมีคำถามว่า: โปรแกรมที่เป็นเจ้าของรูทรู้ได้อย่างไรว่ามีพื้นที่ว่างมากกว่าโปรแกรมที่ไม่ใช่รูท การทำงานdfในฐานะที่ไม่ใช่รูทกับรูทไม่ได้แสดงความแตกต่าง
ลูกปา

12
@confetti: เนื่องจากวีเอฟเอไม่ได้ปฏิเสธความพยายามของพวกเขาในการเขียนไปยังดิสก์ที่มีข้อผิดพลาด (จนถึงระดับเสียงเป็นจริงเต็มรูปแบบของหลักสูตร)
Ignacio Vazquez-Abrams

1
tune2fs -l <device>ควรให้คุณค่านี้กับคนอื่น ๆ จำนวน 5% นั้นถูกตั้งขึ้นในปี 1980 เมื่อดิสก์มีขนาดเล็กกว่ามาก แต่ก็เหลือเพียงเท่านี้ ทุกวันนี้ 1% อาจเพียงพอสำหรับความเสถียรของระบบ
harrymc

7
XFS ขอสงวนบล็อกที่เล็กกว่า 5% หรือ 8192 บล็อก (32 MiB) ดังนั้นจำนวนที่สงวนมักจะเล็กเมื่อเทียบกับขนาดของระบบไฟล์
Michael Hampton

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

3

หากข้อมูลที่คุณต้องการเก็บไว้นั้นสามารถบีบอัดได้ btrfs ที่ติดตั้งด้วยcompress=zstd(หรือcompress-force=zstd) อาจเป็นไปได้ว่า probbaly จะใช้พื้นที่ดิสก์น้อยกว่า ext * อย่างมาก

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

1
คุณต้องการเพิ่มข้อมูลเพิ่มเติมในคำตอบนี้หรือไม่? (มันทำงานอย่างไรมันอาจจะเป็นข้อมูลอ้างอิง ... )
confetti

@confetti แบบนี้เหรอ? patchwork.kernel.org/patch/9817875
hanshenrik

ฉันชอบแนวคิดนี้มาก แต่ข้อมูลเพิ่มเติมเกี่ยวกับวิธีนี้จะส่งผลกระทบต่อความเร็วและประสิทธิภาพและสิ่งเหล่านี้จะดีมาก
ลูกปา

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

2
ในทางกลับกันไฟล์ขนาดใหญ่ส่วนใหญ่ในปัจจุบัน (เช่นรูปภาพ, เสียง, วิดีโอ, แม้แต่รูปแบบเอกสารข้อความส่วนใหญ่) มักจะถูกบีบอัดอยู่แล้วและโดยทั่วไปจะไม่ได้รับประโยชน์จากการบีบอัดเพิ่มเติม อย่างน้อยก็ไม่มีประเภทวัตถุประสงค์ทั่วไปอย่างง่ายที่ดำเนินการในระดับระบบแฟ้ม
Ilmari Karonen

3

อีกจุดที่ยังไม่ได้พูดถึงคือจำนวนของ inodes ที่คุณสำรองไว้ในระบบไฟล์ของคุณ

ตามค่าเริ่มต้น mkfs สร้างจำนวนของ inodes ซึ่งควรทำให้สามารถใส่ไฟล์ขนาดเล็กจำนวนมากลงในระบบไฟล์ของคุณ หากคุณรู้ว่าไฟล์จะมีขนาดใหญ่มากและคุณจะใส่ไฟล์จำนวนเล็กน้อยลงใน FS คุณสามารถลดจำนวนของ inodes ได้

ดูแล! จำนวนนี้ (อัตราส่วนระหว่างพื้นที่และจำนวนของ inodes) สามารถตั้งค่าได้ในเวลาที่สร้างระบบไฟล์เท่านั้น แม้เมื่อขยาย FS อัตราส่วนก็ยังคงเหมือนเดิม


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

@Perkins คุณพูดถูก แต่ฉันคิดว่าไฟล์นี้มีไว้สำหรับไฟล์จิ๋วมาก ๆ : ขนาดบล็อกเริ่มต้นคือ 4kiB (IIRC) ขั้นต่ำคือ 1 kiB ดังนั้นอย่าชนะมากนักยกเว้นดิสก์ของคุณเต็มไปด้วยไฟล์เหล่านั้น แต่อย่างไรก็ตามฉันอาจดำดิ่งสู่วันพรุ่งนี้
glglgl

2
หรือใช้ btrfs ซึ่งสร้าง inodes ตามต้องการ ในขณะที่ inodes ของ ext4 ถูกจัดสรรในเวลาการสร้างระบบไฟล์และไม่สามารถปรับขนาดได้หลังจากการสร้างด้วยขีด จำกัด ที่ยากของ 4 พันล้าน inodes ของ btrfs จะถูกสร้างขึ้นแบบไดนามิกตามต้องการและขีด จำกัด ที่ยากคือ 2 ^ 64 ประมาณ 18.4 ล้านล้าน
คูณ

แจ้งเตือนฉันเมื่อมีการตั้งค่าสปูล Usenet ext4 จะเก็บขนาดเล็ก (ขีด จำกัด อยู่ที่ 60-160 ไบต์ขึ้นอยู่กับสิ่งต่าง ๆ มากมาย) ภายในไอโหนด
mr.spuratic

@ hanshenrik โปรดทราบว่าคุณมีข้อ จำกัด แบบ blockize เหมือนกันใน btrfs (ด้วยวิธีพิเศษสองสามอย่างในการแก้ไข) ดังนั้นคุณยังจำเป็นต้องรู้ว่าไฟล์ประเภทใด (ใหญ่หรือเล็กหรือใหญ่) คุณกำลังจะจัดเก็บและ ปรับระบบไฟล์ของคุณตามลำดับหากคุณต้องการบีบอัดพื้นที่เก็บข้อมูลให้มากที่สุด ความพร้อมใช้งานของการบีบอัดอัตโนมัติจะช่วยได้ไม่น้อยหากคุณเก็บข้อมูลที่อ่อนนุ่ม
Perkins
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.