ระบบไฟล์บีบอัดแบบโปร่งใสใช้ร่วมกับ ext4


26

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

มีการผลิต / โซลูชันที่เสถียรสำหรับการบีบอัดแบบโปร่งใสบน ext4 หรือไม่?

สิ่งที่ฉันได้ลอง:

Ext4 มากกว่าโวลุ่ม ZFSเปิดใช้การบีบอัด สิ่งนี้มีผลกระทบในทางลบ ฉันพยายามสร้างวอลุ่ม ZFS โดยเปิดใช้งานการบีบอัด lz4 และสร้างระบบไฟล์ ext4 บน / dev / zvol / ... แต่ปริมาณ zfs แสดงให้เห็นถึงการใช้งานจริงเป็นสองเท่าและการบีบอัดดูเหมือนจะไม่มีผลใด ๆ

# du -hs /mnt/test
**1.1T**    /mnt/test
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
pool       15.2T  2.70G   290K  /pool
pool/test  15.2T  13.1T  **2.14T**  -

คำสั่งการสร้าง ZFS

zpool create pool raidz2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde2 /dev/sdf1 /dev/sdg1 /dev/sdh2 /dev/sdi1
zfs set recordsize=128k pool
zfs create -p -V15100GB pool/test
zfs set compression=lz4 pool/test
mkfs.ext4 -m1 -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink /dev/zvol/pool/test

Fusecompress: ดูเหมือนว่าจะทำงาน แต่ไม่เสถียร 100% กำลังมองหาทางเลือก

LessFS: เป็นไปได้ไหมที่จะใช้ Lessfs ร่วมกับ ext4 ฉันยังไม่ได้ลอง แต่จะสนใจข้อมูลเชิงลึกของผู้ใช้

ปัญหาสำคัญอย่างหนึ่ง: ไม่โปร่งใสอย่างแท้จริง

ปัญหาที่ฉันเห็นด้วย fusecompress คือโควต้า ตัวอย่างเช่นถ้าฉันเปิดใช้งานการบีบอัดบนระบบไฟล์ฉันต้องการให้ระบบของฉันได้รับประโยชน์จากการบีบอัดไม่จำเป็นต้องเป็นผู้ใช้ปลายทาง หากฉันเปิดใช้งานโควต้า 1GB สำหรับผู้ใช้ด้วยอัตราส่วนการบีบอัด 1.5 พวกเขาจะสามารถอัปโหลดข้อมูล 1.5GB แทนที่จะเป็นข้อมูล 1GB และระบบได้ประโยชน์จากการบีบอัด เรื่องนี้ดูเหมือนจะแสดงบน df -h มีวิธีการบีบอัดที่โปร่งใสเพื่อโควต้าหรือไม่


แน่ใจ คุณช่วยรายการ OS / distro / เวอร์ชั่นและรายละเอียดเกี่ยวกับลักษณะของข้อมูลที่คุณต้องการจัดเก็บได้หรือไม่?
ewwhite

นอกจากนี้รายละเอียดฮาร์ดแวร์
ewwhite

1
@ewwhite 8x3TB ในซอฟต์แวร์ RAID6 ข้อมูลจะเป็นการสำรองข้อมูลแบบซิงค์จากเซิร์ฟเวอร์อื่น ๆ ดังนั้นประเภทข้อมูลแบบผสมและผู้ใช้ปลายทางเอกสารและอื่น ๆ CentOS 6.5 x64
user235918

คุณแน่ใจหรือว่าต้องการสิ่งนี้ คุณมีไฟล์ขนาดใหญ่กระจัดกระจายหรือไม่? พื้นที่ดิสก์มีราคาถูกวันนี้
Andrew Schulman

@AndrewSchulman: การใช้ประโยชน์จากการบีบอัดเป็นวิธีที่ดีกว่าจากการคำนวณของฉัน ค่าใช้จ่ายของดิสก์และตัวควบคุมพิเศษที่สนับสนุนพวกเขานั้นมากกว่าค่าใช้จ่ายของ CPU
user235918

คำตอบ:


27

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

ดู: https://pthree.org/2012/12/21/zfs-administr-part-xiv-zvols/สำหรับคำอธิบายอื่น

ในกรณีที่ใช้บ่อยที่สุดของฉันฉันใช้ประโยชน์จากคุณสมบัติ ZFS zvol เพื่อสร้างปริมาณเบาบางบน zpool ที่มีอยู่ คุณสมบัติของ zvol นั้นสามารถตั้งค่าได้เหมือนกับระบบไฟล์ ZFS ปกติ ในช่วงหัวเลี้ยวหัวต่อนี้คุณสามารถตั้งค่าคุณสมบัติเช่นชนิดการบีบอัดขนาดปริมาณวิธีการแคช ฯลฯ

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

เมานต์นี้และคุณมีระบบไฟล์ที่สนับสนุนโดย zvol และคุณสมบัติทั้งหมด


นี่คือขั้นตอนการทำงานของฉัน ...

สร้าง zpool ประกอบด้วยดิสก์สี่ตัว:
คุณจะต้องการashift=12คำสั่งสำหรับประเภทของดิสก์ที่คุณใช้ ชื่อ zpool คือ "vol0" ในกรณีนี้

zpool สร้าง -o ashift = 12 -f vol0 mirror scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042 กระจก scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044

ตั้งค่าการตั้งค่าเริ่มต้น zpool:
ฉันตั้งค่าautoexpand=onที่ระดับ zpool ในกรณีที่ฉันแทนที่ดิสก์ด้วยไดรฟ์ที่ใหญ่กว่าหรือขยายพูลในการตั้งค่ามิเรอร์ ZFS ฉันมักจะไม่ใช้ ZFS raidz1 / 2/3 เนื่องจากประสิทธิภาพไม่ดีและไม่สามารถขยาย zpool ได้

zpool set autoexpand=on vol0

ตั้งค่าคุณสมบัติระบบไฟล์ zfs เริ่มต้น:
โปรดใช้lz4อัลกอริทึมการบีบอัดสำหรับการติดตั้ง ZFS ใหม่ ไม่เป็นไรที่จะปล่อยไว้ตลอดเวลา

zfs set compression=lz4 vol0
zfs set atime=off vol0

สร้าง ZFS zvol:
สำหรับ ZFS บน Linux มันสำคัญมากที่คุณจะต้องใช้ขนาดบล็อกใหญ่ -o volblocksize=128kจำเป็นอย่างยิ่งที่นี่ -sตัวเลือกสร้าง zvol เบาบางและไม่กินพื้นที่สระว่ายน้ำจนมันจำเป็น คุณสามารถเขียนทับได้ที่นี่หากคุณรู้จักข้อมูลของคุณดี ในกรณีนี้ฉันมีพื้นที่ดิสก์ที่ใช้งานได้ประมาณ 444GB ในพูล แต่ฉันกำลังแสดงปริมาณ 800GB ให้กับ XFS

zfs create -o volblocksize=128K -s -V 800G vol0/pprovol

พาร์ติชันอุปกรณ์ zvol:
( ควรเป็น / dev / zd0 สำหรับ zvol แรก; / dev / zd16, / dev / zd32 เป็นต้นสำหรับ zvols ที่ตามมา )

fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)

สร้างและเมานต์ระบบไฟล์:
mkfs.xfs หรือ ext4 บนพาร์ติชันที่สร้างขึ้นใหม่ / dev / zd0p1

mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1

คว้า UUID ด้วยและปรับเปลี่ยนblkid/etc/fstab

UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro       xfs     noatime,logbufs=8,logbsize=256k 1 2

เมานต์ระบบไฟล์ใหม่

mount /ppro/

ผล...

[root@Testa ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sde2        20G  8.9G  9.9G  48% /
tmpfs            32G     0   32G   0% /dev/shm
/dev/sde1       485M   63M  397M  14% /boot
/dev/sde7       2.0G   68M  1.9G   4% /tmp
/dev/sde3        12G  2.6G  8.7G  24% /usr
/dev/sde6       6.0G  907M  4.8G  16% /var
/dev/zd0p1      800G  398G  403G  50% /ppro  <-- Compressed ZFS-backed XFS filesystem.
vol0            110G  256K  110G   1% /vol0

รายการระบบไฟล์ ZFS

[root@Testa ~]# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
vol0           328G   109G   272K  /vol0
vol0/pprovol   326G   109G   186G  -   <-- The actual zvol providing the backing for XFS.
vol1           183G   817G   136K  /vol1
vol1/images    183G   817G   183G  /images

รายชื่อ ZFS zpool

[root@Testa ~]# zpool list -v
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
vol0   444G   328G   116G    73%  1.00x  ONLINE  -
  mirror   222G   164G  58.1G         -
    scsi-AccOW140403AS1322043      -      -      -         -
    scsi-AccOW140403AS1322042      -      -      -         -
  mirror   222G   164G  58.1G         -
    scsi-AccOW140403AS1322013      -      -      -         -
    scsi-AccOW140403AS1322044      -      -      -         -

คุณสมบัติ ZFS zvol ( จดreferenced, compressratioและvolsize )

[root@Testa ~]# zfs get all vol0/pprovol
NAME          PROPERTY               VALUE                  SOURCE
vol0/pprovol  type                   volume                 -
vol0/pprovol  creation               Sun May 11 15:27 2014  -
vol0/pprovol  used                   326G                   -
vol0/pprovol  available              109G                   -
vol0/pprovol  referenced             186G                   -
vol0/pprovol  compressratio          2.99x                  -
vol0/pprovol  reservation            none                   default
vol0/pprovol  volsize                800G                   local
vol0/pprovol  volblocksize           128K                   -
vol0/pprovol  checksum               on                     default
vol0/pprovol  compression            lz4                    inherited from vol0
vol0/pprovol  readonly               off                    default
vol0/pprovol  copies                 1                      default
vol0/pprovol  refreservation         none                   default
vol0/pprovol  primarycache           all                    default
vol0/pprovol  secondarycache         all                    default
vol0/pprovol  usedbysnapshots        140G                   -
vol0/pprovol  usedbydataset          186G                   -
vol0/pprovol  usedbychildren         0                      -
vol0/pprovol  usedbyrefreservation   0                      -
vol0/pprovol  logbias                latency                default
vol0/pprovol  dedup                  off                    default
vol0/pprovol  mlslabel               none                   default
vol0/pprovol  sync                   standard               default
vol0/pprovol  refcompressratio       3.32x                  -
vol0/pprovol  written                210M                   -
vol0/pprovol  snapdev                hidden                 default

ทำไมต้องแบ่งพาร์ติชัน zvol ไม่สามารถใช้โดยตรงได้ใช่ไหม
Michael Hampton

3
@MichaelHampton ส่วนใหญ่สำหรับการจัดตำแหน่งและความสอดคล้อง นอกจากนี้ฉันต้องการความยืดหยุ่นถ้าฉันขยายปริมาณพื้นฐาน ที่นี่มีนามธรรมหลายชั้น มันคล้ายกับข้อโต้แย้งของการใช้เมื่อเทียบกับ/dev/sdb /dev/sdb1
ewwhite

1
ขอบคุณสำหรับข้อมูลของคุณ. คำแนะนำที่ดีมากมายในที่นี่ ฉันจะทดสอบมัน
user235918

2
@MichaelHampton BTW วันนี้ฉันไม่แบ่งอีกต่อไป ... โดยเฉพาะกับเครื่องเสมือน
ewwhite

1
คุณช่วยบอกเกี่ยวกับต้นทุนทรัพยากรเพิ่มเติมสำหรับเลเยอร์ ZFS ในการตั้งค่านี้ (RAM, CPU)
Sz.

4

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


4
Red Hat ไม่แนะนำให้ทำออนไลน์ด้วยตัวเลือกการยกเลิก (ด้วย ext4 หรือ xfs) เนื่องจากมีผลกระทบต่อประสิทธิภาพ มันสะอาดกว่าที่จะรันfstrimคำสั่งเป็นระยะ
ewwhite

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