มีการบันทึกไฟล์บนดิสก์ตามลำดับหรือไม่


22

ดังที่ฉันเข้าใจ "ไฟล์กระจัดกระจาย" หมายความว่าไฟล์อาจมี 'ช่องว่าง' ดังนั้นข้อมูลที่ใช้จริงอาจมีขนาดเล็กกว่าขนาดไฟล์โลจิคัล

ระบบไฟล์ Linux บันทึกไฟล์บนดิสก์ได้อย่างไร ฉันสนใจ ext4 เป็นหลัก แต่:

  1. สามารถบันทึกไฟล์ไม่เรียงตามลำดับบนดิสก์ได้หรือไม่? โดยที่ฉันหมายถึงส่วนหนึ่งของไฟล์ที่อยู่ทางกายภาพที่อยู่ X และส่วนต่อไปที่ทางกายภาพที่อยู่ Y ซึ่งไม่ได้อยู่ใกล้กับ X + ชดเชย)
  2. ฉันสามารถควบคุมลำดับไฟล์ได้หรือไม่?
    ฉันต้องการจัดสรรไฟล์ 10GB ฉันต้องการให้เป็นลำดับบนดิสก์และไม่แบ่งระหว่างออฟเซ็ตที่แตกต่างกัน
  3. มันทำหน้าที่แตกต่างกันระหว่างประเภทต่าง ๆ หรือไม่?

คุณอาจต้องการอ่านext4.wiki.kernel.org/index.php/Main_Page
roaima

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

4
นี่คือรายละเอียดการนำไปใช้ของระบบไฟล์ ระบบไฟล์เกือบทั้งหมดทำไฟล์แฟรกเมนต์ตามค่าเริ่มต้น เท่านั้นiso9660และromfsไม่สามารถทำเช่นนั้นได้และต้องการการจัดเก็บข้อมูลอย่างต่อเนื่อง (สิ่งเหล่านี้ฉันสามารถแสดงรายการนอกหัว)
mirabilos

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

3
@hudac สิ่งหนึ่งที่ต้องจำไว้คือความต่อเนื่องไม่ใช่สิ่งที่มีประโยชน์ในทางปฏิบัติ สิ่งที่ง่ายคือแฟลชที่การกระจายตัวไม่ใช่เรื่องใหญ่ แต่บนแผ่นเสียงหมุนคุณยังอาจไม่ได้รับประโยชน์จากข้อมูลที่ต่อเนื่องกัน บนแผ่นเสียงหมุนคุณต้องคิดเกี่ยวกับรูปแบบการเข้าถึงและข้อมูลของคุณ หากคุณต้องการภาคที่เพิ่งผ่านหัวคุณต้องรอให้มันกลับมาอย่างเต็มที่อีกครั้ง เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดคุณต้องซวนเซข้อมูลเพื่อให้ "ปิด" เมื่อต้องอ่าน การเพิ่มขนาดแคชง่ายขึ้น ;-)
Ukko

คำตอบ:


41

สามารถบันทึกไฟล์ไม่เรียงตามลำดับบนดิสก์ได้หรือไม่? ฉันหมายถึงส่วนหนึ่งของไฟล์ตั้งอยู่ภายใต้ที่อยู่จริง X และอีกส่วนหนึ่งภายใต้ที่อยู่จริง Y ซึ่งไม่ใกล้เคียงกับ X + ออฟเซ็ต)

ใช่; สิ่งนี้เรียกว่าการแตกแฟรกเมนต์ของไฟล์และไม่ใช่เรื่องแปลกโดยเฉพาะอย่างยิ่งกับไฟล์ขนาดใหญ่ ระบบไฟล์ส่วนใหญ่จัดสรรพื้นที่ตามที่ต้องการมากขึ้นหรือน้อยลงตามลำดับ แต่พวกเขาไม่สามารถคาดเดาพฤติกรรมในอนาคตได้ดังนั้นหากคุณเขียน 200MiB ไปยังไฟล์จากนั้นเพิ่มอีก 100MiB มีโอกาสที่ไม่ใช่ศูนย์ที่ชุดข้อมูลทั้งสองจะ ถูกเก็บไว้ในพื้นที่ต่าง ๆ ของดิสก์ (โดยทั่วไปการเขียนอื่น ๆ ที่ต้องการพื้นที่บนดิสก์มากขึ้นเกิดขึ้นหลังจากการเขียนครั้งแรกและก่อนที่สองจะมาในระหว่างสอง) หากระบบไฟล์ใกล้เต็มแล้วสถานการณ์มักจะแย่ลง: อาจไม่มีพื้นที่ต่อเนื่องที่มีขนาดใหญ่พอที่จะเก็บไฟล์ใหม่ได้ดังนั้นจึงต้องแยกส่วน

ฉันสามารถควบคุมลำดับไฟล์ได้หรือไม่? ฉันต้องการจัดสรรไฟล์ขนาดใหญ่ 10GB ฉันต้องการให้เป็นลำดับในดิสก์และไม่แบ่งระหว่างออฟเซ็ตที่แตกต่างกัน

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

มันทำหน้าที่แตกต่างกันระหว่างประเภทต่าง ๆ หรือไม่?

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


1
จะใช้fallocate(3)ให้แน่ใจว่าเรียงลำดับไฟล์หรือไม่ หรือเพียงแค่บอกใบ้ระบบไฟล์? ฉันไม่สามารถเข้าใจได้อย่างสมบูรณ์จากหน้าคู่มือ
hudac

6
ไม่สามารถรับรองการจัดสรรต่อเนื่องได้มันเป็นเพียงคำใบ้ แต่คุณควรใช้มันอย่างแน่นอนหากคุณกำลังเขียนไฟล์ 10GiB!
Stephen Kitt

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

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

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

17

คำสั่งfilefragจะบอกวิธีการจัดเก็บไฟล์ของคุณบนอุปกรณ์ของคุณ:

# filefrag -v /var/log/messages.1 
Filesystem type is: ef53
File size of /var/log/messages.1 is 41733 (11 blocks, blocksize 4096)
 ext logical physical expected length flags
   0       0  2130567               1 
   1       1 15907576  2130568      1 
   2       2 15910400 15907577      1 
   3       3 15902720 15910401      7 
   4      10  2838546 15902727      1 eof
/var/log/messages.1: 5 extents found

หากคุณเขียนไฟล์ของคุณในครั้งเดียวฉันเดาว่าไฟล์ของคุณจะไม่แยกส่วน

หน้าคนของfallocate(1) ค่อนข้างชัดเจน:

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

ในฐานะที่เป็น Linux Kernel v2.6.31 การfallocateเรียกระบบได้รับการสนับสนุนโดยระบบไฟล์ btrfs, ext4, ocfs2 และ xfs

มันเป็นลำดับหรือไม่ ระบบจะพยายามจัดสรรบล็อกตามลำดับก่อน หากไม่สามารถทำได้จะไม่เตือนคุณ


ประเภท 'ef53' คืออะไร ฉันเห็นมันในไฟล์ของฉันด้วย แต่ประเภท FS ext4ของฉันคือ
hudac

2
EF53 คือหมายเลข "SUPER_MAGIC" จำนวน ext2, ext3 และ ext4 ค้นหาใน "include / uapi / linux / magic.h" ในแหล่งเคอร์เนลสำหรับหมายเลขเวทย์มนตร์ทั้งหมดของทุกระบบไฟล์
Vouze

ใน Debian, ถูกซ่อนอยู่ในfilefrag /usr/sbinแต่ดูเหมือนว่าจะใช้งานได้กับผู้ใช้ทั่วไป (อย่างน้อย ext4) มันอาจจะเป็นคำแนะนำในstraceการดำเนินการเพื่อดูวิธีการวัดการกระจายตัวสำหรับตัวคุณเองหากขาดการเตือนเป็นอุปสรรคต่อคุณ
Toby Speight

6

คุณพูดถึงไฟล์หร็อมแหร็มและไม่มีคำตอบอื่นใดที่กล่าวถึงพวกเขา

ไฟล์ส่วนใหญ่ไม่กระจัดกระจาย วิธีทั่วไปในการสร้างไฟล์คือเขียนทุกอย่างในครั้งเดียวตั้งแต่เริ่มต้นจนจบ ไม่มีหลุม

อย่างไรก็ตามคุณได้รับอนุญาตให้พูดว่า "ย้ายไปที่ตำแหน่ง 1,000,000,000,000 และเขียนไบต์ที่นั่น" สิ่งนี้จะสร้างไฟล์ที่ดูเหมือนว่าเป็น etabyte ใหญ่ แต่จริงๆแล้วใช้เพียง 4k บนดิสก์เท่านั้น นี่เป็นไฟล์กระจัดกระจาย

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

แม้ว่าสิ่งนี้จะมีประโยชน์ แต่ก็มีข้อเสียอยู่สองประการ

อย่างแรกคือไฟล์จะถูกแยกส่วนซึ่งเป็นสิ่งที่คุณกังวล

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


แต่แม้ไฟล์ที่ไม่กระจัดกระจายมักจะไม่ต่อเนื่องกันบนดิสก์
Barmar

2

ฉันสามารถควบคุมลำดับไฟล์ได้หรือไม่? ฉันต้องการจัดสรรไฟล์ 10GB ฉันต้องการให้เป็นลำดับบนดิสก์และไม่แบ่งระหว่างออฟเซ็ตที่แตกต่างกัน

มีอย่างน้อยสองวิธีในการบรรลุเป้าหมายนี้

  1. ใช้ระบบไฟล์ที่มีพื้นที่ว่างมากมายและจัดสรรพื้นที่ล่วงหน้า (เช่นใช้เครื่องหมายสิ้นสุดของข้อมูลเฉพาะแอปพลิเคชันและผนวกข้อมูลแบบสุ่มจนกว่าขนาดไฟล์จะถึง 10GB) สิ่งนี้ไม่รับประกันว่าจะส่งผลให้ไม่มีการจัดเรียงข้อมูล

  2. ใช้ระบบไฟล์ raw (uncooked)แทน ext4 เป็นต้นบางครั้ง DBMSs ทำสิ่งนี้ด้วยเหตุผลด้านประสิทธิภาพ ข้อดีคือคุณต้องทำการแคช / journalling / recovery เป็นต้นหากจำเป็น

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


ดูสิ่งนี้ด้วย

เป็นจริงหรือไม่ที่ระบบการจัดการฐานข้อมูลมักจะข้ามระบบไฟล์?


-1

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


1
"เรียกใช้ตัวจัดเรียงข้อมูล" หรือไม่ มีโปรแกรมดังกล่าวหรือไม่? สิ่งเดียวที่พบเมื่อฉันค้นหาด้วยaptitude search ~ddefragได้ddrescueviewและnidsส่วน TCP reassembly ห้องสมุด คำตอบของคุณไม่ได้มีประโยชน์มากถ้าคุณไม่พูดในสิ่งที่เรียกว่าโปรแกรมหรือข้อโต้แย้งใดที่ต้องผ่าน
Toby Speight

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