ระบบไฟล์ BTRFS หลายอุปกรณ์พร้อมดิสก์ที่มีขนาดแตกต่างกัน


14

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


คุณจัดการดิสก์พื้นฐานอย่างไร ด้วย LVM?
Andy Smith

@Andy, btrfs จับดิสก์หลายในสไตล์ LVM / RAID ตรวจสอบนี้
OneOfOne

อ๊ะ ... ฉันไม่ดี ไชโยสำหรับสิ่งนั้น ;-)
Andy Smith

คำตอบ:


4

Btrfs สามารถใช้ระดับการโจมตีที่แตกต่างกันสำหรับข้อมูลและข้อมูลเมตา:

ค่าเริ่มต้น (แม้สำหรับดิสก์เดียว) คือ raid1 สำหรับข้อมูลเมตา (ไดเรกทอรี ฯลฯ ) และ raid0 สำหรับข้อมูล

หากคุณไม่ได้เปลี่ยนสิ่งนี้เป็นไปได้ว่าคุณจะไม่มีปัญหาในการเพิ่มแผ่นดิสก์แผ่นที่สองและเรียกใช้การปรับสมดุลใหม่ เพราะจะมีการคัดลอกเฉพาะข้อมูลเมตาไปยังแผ่นดิสก์ทั้งสอง (คุณสามารถดูขนาดข้อมูลเมตาได้ด้วยbtrfs filesystem df /) เพิ่งทราบว่าหากดิสก์ตัวใดตัวหนึ่งของคุณล้มเหลวคุณจะสูญเสียข้อมูล

เนื่องจากดิสก์ 2tb นั้นมีขนาดใหญ่กว่า 500g ดังนั้นจึงอาจให้อัตราต่อรองที่ดีกว่าถ้าคุณเพิ่มอันใหม่แล้วลบอันเก่าออก (อัตราต่อรองของไดรฟ์หนึ่งที่ล้มเหลวนั้นน้อยกว่าอัตราต่อรองของทั้งสองไดรฟ์ ความล้มเหลว)

หากคุณวางแผนที่จะมีอาร์เรย์การโจมตีในภายหลัง (พร้อมไดรฟ์ที่มีขนาดใกล้เคียงกันมากขึ้น) คุณอาจต้องการสร้างระบบไฟล์ขึ้นมาใหม่ในไดรฟ์ใหม่ด้วย RAID1 สำหรับข้อมูลและเมตาดาต้า หลังจากนั้นเมื่อคุณมีเงินซื้อไดรฟ 2tb ตัวที่สอง

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

pss: อย่างจริงจังอย่าถูกล่อลวงให้ไม่ใช้ raid1 สำหรับข้อมูลเมตา psss: มีโอกาสดีมากที่ btrfs จะได้รับความสามารถในการเปลี่ยนระดับการจู่โจมแบบไดนามิก


โดยส่วนตัวฉันวางแผนที่จะสร้าง btrfs ของฉันใหม่ fs / arrays / what-do-i-call-this ทันทีที่ btrfs มีการสนับสนุน raid5 และ raid6
Arthur Ulfeldt

12

ขึ้นอยู่กับโปรไฟล์ที่คุณใช้สำหรับบล็อกข้อมูลของระบบไฟล์ Btrfs หลายอุปกรณ์

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

  • เมื่อคุณใช้โปรไฟล์ "เดี่ยว" สำหรับบล็อคข้อมูลแต่ละดิสก์จะเต็มไปด้วยความจุเต็มที่ เช่นmkfs.btrfs -d single /dev/sda /dev/sdb

ฉันมีไฟล์เซิร์ฟเวอร์ที่มี 2TB และดิสก์ 3TB มันบูท Ubuntu 12.10 จากแฟลชไดรฟ์ USB ก่อนอื่นฉันสร้างระบบไฟล์ Btrfs โดยไม่มี-d singleตัวเลือก:

mkfs.btrfs /dev/sda /dev/sdb

ผลก็คือฉันสามารถเก็บได้เพียงประมาณ 4TB (ข้อมูลไฟล์ไบนารี TB 3.45)

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

หมายเหตุused 1.82TBสำหรับไดรฟ์ 3TB

จากนั้นฉันใช้คำสั่ง "balance" เพื่อแปลงบล็อคข้อมูลจาก RAID0 เป็นโปรไฟล์ "single":

btrfs balance start -dconvert=single /mnt/btrfs1

ใช้เวลานานมาก (ประมาณ 30 ชั่วโมง) เพื่อปรับสมดุลข้อมูล 4TB แต่หลังจากเสร็จฉันสามารถใช้ 5TB เต็ม (ข้อมูลไฟล์ไบนารี TB 4.36)

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1

2

ฉันใช้อุปกรณ์หลายเครื่องกับ btrfs ใน Ubuntu และใช้งานได้ดี โปรดทราบว่า btrfs ไม่ได้ใช้ระดับ RAID มาตรฐาน ใช้การสตริปและการมิร์เรอร์เสริม แต่ไม่ใช่ RAID จริง


1

เป็นไปได้ที่จะรวมไดรฟ์ที่มีขนาดแตกต่างกันเป็น btrfs
แต่ปัจจุบัน btrfs ไม่สามารถจัดการ ENOSPC (ไม่มีพื้นที่เหลือบนอุปกรณ์) ได้เป็นอย่างดี

เช่นฉันติดตั้ง 3 ไดรฟ์ในอาร์เรย์ RAID0 (สไทรพ์) 1x500GB, 1x250GB, 1x160GB
คุณจะเข้าใจว่าคุณจะมีพื้นที่ดิสก์ระหว่าง 800-900GB

นี่คืออะไร df -hแสดง:
/ dev / sdf 848G 615G 234G 73% / media / btrfs

แต่ฉันไม่สามารถจัดเก็บข้อมูลในอาร์เรย์ได้อีก (ไม่มีพื้นที่เหลือ)

btrfs filesystem df /media/btrfsแสดงให้ฉันเห็นนี้:
ข้อมูล: ทั้งหมด = 612.51GB, ใช้ = 612.51GB
ข้อมูลเมตา: ทั้งหมด = 1.62GB, ใช้ = 990.73MB
ระบบ: ทั้งหมด = 12.00MB, ใช้ = 48.00KB

แม้แต่การปรับสมดุลก็ไม่ได้ช่วยอะไร

ในรายการส่งเมลฉันเห็นการโทรนี้:
ขนาดของไดรฟ์ที่เล็กที่สุด * จำนวนของไดรฟ์ในอาเรย์
(แม้ว่าฉันจะมีพื้นที่เพิ่มเติม: 612GB แทนที่จะเป็น 160GB * 3 = 480GB)

ดังนั้นในสถานะปัจจุบันของโอกาสในการพัฒนาคือคุณจะไม่สามารถใช้พื้นที่ทั้งหมดที่คุณมีแม้ว่า btrfs จะรองรับขนาดที่แตกต่างในอาร์เรย์เดียว

ฉันใช้ Ubuntu 10.10 พร้อมเคอร์เนล 2.6.35-22


ฉันไม่คิดว่ามันจะรองรับสิ่งที่คุณต้องการอย่างน้อยก็จนกว่ามันจะรองรับระดับการจู่โจมที่แตกต่างกันในแต่ละไฟล์ / ต่อไดเรกทอรี สำหรับ raid0 (แถบ) ต้องใช้ btrfs เพื่อเก็บชิ้นส่วนขนาดเท่ากันของแต่ละไฟล์ในอุปกรณ์ทั้ง 3 จะทำเช่นนั้นได้อย่างไรหากอนุญาตให้คุณใช้อุปกรณ์ทั้งหมด 500GB ในเครื่องเดียว หากแทนที่จะเป็น "raid0" คุณใช้ "single" (ไม่แน่ใจว่าตัวเลือกนี้พร้อมใช้งานเมื่อคุณโพสต์) ดังนั้น btrfs จะไม่พยายามทำซ้ำไฟล์ทุกที่และจะช่วยให้คุณใช้พื้นที่ทั้งหมดบนอุปกรณ์ทั้งหมด แต่สำหรับระดับการจู่โจมมันไม่สมเหตุสมผล: คุณกำลังพยายามละเมิดคำจำกัดความของระดับการจู่โจม
bobpaul

ไม่เป็นไรฉันผิด btrfs raid0 / 1 ใช้ลายเส้น / สะท้อนไปยัง 1 อุปกรณ์อื่นไม่ใช่อุปกรณ์ทั้งหมดดังนั้น 1TB + 500GB + 500GB จะทำงานได้ดีเช่นเดียวกับ 1TB + 1TB สำหรับ raid0 และ raid1 (อย่างน้อยเท่ากับ Linux 3.0) ก่อนหน้า Linux 3.0 มีปัญหาที่คุณอธิบาย
bobpaul

1

update: คำตอบด้านล่างเขียนขึ้นก่อนที่จะปล่อย Linux 3.0 Linux 3.0 มีแพทช์เสมือน - รอบ - โรบิน

เมื่อคุณทำการมิเรอร์ข้อมูลหรือการสตริปมิร์เรอร์หรือแถบสตริปที่สองจำเป็นต้องถูกจัดสรรบนอุปกรณ์อื่นที่มีพื้นที่ว่าง BTRFS จัดสรรชิ้นส่วนให้กับอุปกรณ์ต่าง ๆ ในรูปแบบ round-robin ซึ่งอาจทำให้เกิดพื้นที่สูญเสียหากคุณมีอุปกรณ์ที่มีขนาดแตกต่างกัน

มีแพทช์กึ่งรอบโรบินในการปรับปรุงนี้ แน่นอนว่ายังเป็นไปไม่ได้ที่จะจับคู่ชิ้นส่วนทั้งหมดบนอุปกรณ์ต่าง ๆ หากคุณมีดิสก์ขนาด 500GB และ 2TB แพตช์มีไว้สำหรับสถานการณ์เช่น 1 x 1TB + 2 x 500GB ซึ่งดิสก์ขนาดเล็กแต่ละตัวควรจะทำมิเรอร์ / สตริปกับดิสก์ขนาดใหญ่แทนที่จะเป็นดิสก์ขนาดเล็กอื่น

ในสถานการณ์ของคุณฉันจะใช้โหมด "เดียว" สำหรับข้อมูลของคุณ ( mkfs.btrfs -d single) Chunks ไม่ได้จับคู่ในโหมดนั้นดังนั้นฉันคิดว่าจะไม่มีปัญหากับอุปกรณ์ที่มีขนาดต่างกัน ฉันยังไม่ได้ทดสอบ


0

ปัญหานี้ใช้กับการตั้งค่า btrfs-raid1 เท่านั้นจากหน้าGotchas :

  • การจัดสรรจะทำในลักษณะ round-robin หากคุณมีกลยุทธ์การโจมตี 1 ในไดรฟ์ข้อมูลที่ประกอบด้วยไดรฟ์ที่ไม่ตรงกัน (ไดรฟ์ข้อมูลที่มีขนาดแตกต่างกัน) ไดรฟ์ข้อมูลขนาดเล็กของคุณอาจเติมเต็มในขณะที่เหลือพื้นที่ว่างจำนวนมากบนไดรฟ์ที่ใหญ่ที่สุด คุณสามารถตรวจสอบได้ว่านี่เป็นปัญหาหากมีความแตกต่างระหว่าง 'df' และ 'btrfs filesystem df [mountpoint]' และ ถ้าคำสั่งหลังแสดงว่า "ทั้งหมด" และ "ใช้" เหมือนกันในบรรทัด "Data" . การปรับสมดุลอาจลดปัญหานี้ได้ (2.6.33)
    • หากปริมาณของคุณเติมเต็มในลักษณะนี้การปรับสมดุลอาจทำให้ ENOSPC เกิดข้อผิดพลาดอย่างรวดเร็ว ("ไม่มีข้อผิดพลาด SPaCe เหลืออยู่ในอุปกรณ์") คุณอาจต้องลบไฟล์ที่มีขนาดค่อนข้างใหญ่เพื่อแก้ไขจุดบกพร่องนี้จากนั้นการปรับสมดุลจะสำเร็จ (2.6.33)
    • การปรับสมดุลอาจทำให้เกิดการใช้งาน CPU ที่รุนแรงมากเป็นระยะเวลานาน (2.6.34 & 2.6.35)

ขออภัยที่จะทำให้คุณทำซ้ำตัวเอง แต่ฉันกำลังจะเพิ่มอุปกรณ์ใหม่และฉันต้องแน่ใจ แหล่งที่มาทั้งหมดที่ตรวจสอบเกี่ยวกับสถานะ RAID0 ที่ดิสก์จำเป็นต้องมีขนาดเท่ากัน (เช่น freebsd geom doc: "แต่ละดิสก์ในแถบ RAID0 ต้องมีขนาดเท่ากันเนื่องจากคำขอ I / O ถูกอินเตอร์ลีฟเพื่ออ่านหรือเขียน เป็นหลายดิสก์พร้อมกัน ") คุณยืนยันได้ไหมว่ามันใช้งานได้กับ Btrfs ได้ไหม?
fokenrute

ฉันขอโทษฉันไม่มี btrfs หลายอุปกรณ์ฉันไม่สามารถยืนยันได้ แต่ไม่มีอะไรที่ฉันสามารถพูดได้ว่ามีขนาดอุปกรณ์เท่ากันสำหรับ raid0 + btrfs แต่ถ้าคุณมีเวลามากพอให้แบ่งดิสก์ใหม่เป็น 1tb / 1tb สำรองดิสก์เก่าไปยังหนึ่งในพาร์ติชันต่อท้าย 1tb ที่ว่างเปล่าถ้ามันทำงานผนวกพาร์ทิชันที่ 2
OneOfOne
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.