็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿง Linux ๆช”ๆกˆ็ณป็ตฑๆทฑๅ…ฅๅ‰–ๆž:EXT4、XFS、Btrfs、ZFS ๅ„ช็ผบ้ปž่ˆ‡ๅฏฆๅ‹™้ธๆ“‡ๆŒ‡ๅ—

    ๐Ÿง Linux ๆช”ๆกˆ็ณป็ตฑๆทฑๅ…ฅๅ‰–ๆž:EXT4、XFS、Btrfs、ZFS ๅ„ช็ผบ้ปž่ˆ‡ๅฏฆๅ‹™้ธๆ“‡ๆŒ‡ๅ—

    Linux ไธ–็•Œไธญๆœ€้‡่ฆ、ๅปๆœ€ๅฎนๆ˜“่ขซๅฟฝ็•ฅ็š„ๅŸบ็คŽๅปบ่จญ,ๅฐฑๆ˜ฏๆช”ๆกˆ็ณป็ตฑ(Filesystem)。 ๅฎƒๆฑบๅฎšไบ†่ณ‡ๆ–™ๅฆ‚ไฝ•ๅญ˜ๆ”พ、ๆ•ˆ่ƒฝๅฆ‚ไฝ•็™ผๆฎ、SSD ๅฆ‚ไฝ•่€็”จ、ไผบๆœๅ™จๆ˜ฏๅฆ็ฉฉๅฎš, ๆ›ดๆฑบๅฎšไบ†ไฝ ๅœจ VM、ๅฎนๅ™จ、่ณ‡ๆ–™ๅบซ、Proxy、NAS、PBS ็ญ‰ๆƒ…ๅขƒไธ‹ๆ˜ฏๅฆๆœ‰ๆ•ˆ็އ。

    ๆœฌๆ–‡ๆŽก็”จ ็™พ็ง‘็ดšๆทฑๅบฆ,ๆถต่“‹: EXT4、XFS、Btrfs、ZFS ๅ››ๅคงๆช”ๆกˆ็ณป็ตฑ็š„ๆžถๆง‹、ๆ€ง่ƒฝ、Journaling、Metadata、ๅฟซ็…ง、RAID、CoW、 ไปฅๅŠ็œŸๅฏฆไธ–็•Œ้ƒจ็ฝฒไธŠ็š„้ธๆ“‡ๆŒ‡ๅ—。

    ๅŒๆ™‚ๅŒ…ๅซๅฎŒๆ•ด็š„ ASCII ๆžถๆง‹ๅœ–็คบๅฏฆๅ‹™ๆฏ”่ผƒ่กจๆ ผๅฏฆ้š›ๆŒ‡ไปค ่ˆ‡ ไผๆฅญ้ƒจ็ฝฒ็ถ“้ฉ—,ๅฏไฝœ็‚บๆ‚จๅœจ Linux ไธŠ ้ธๆ“‡ FileSystem ็š„ๆŠ€่ก“่—ๆœฌ。

    ๐Ÿ“‘ ็›ฎ้Œ„


    ไธ€、็‚บไป€้บผๆช”ๆกˆ็ณป็ตฑ้€™้บผ้‡่ฆ?(ๅธธ่ฆ‹่ฟทๆ€)

    ๅพˆๅคšๅทฅ็จ‹ๅธซ็ฌฌไธ€ๆฌก็ขฐๅˆฐ FS ้ธๆ“‡ๆ™‚ๆœƒๅ•:

    • 「้ƒฝๆ”ฏๆด่ฎ€ๅฏซ,ไธ้ƒฝๅทฎไธๅคšๅ—Ž?」
    • 「ๆช”ๆกˆ็ณป็ตฑไธๆ˜ฏๆ ผๅผๅŒ–ไธ€ไธ‹ๅฐฑๅฅฝไบ†?」

    ไบ‹ๅฏฆไธŠๅฎŒๅ…จไธๅŒ。

    ไธๅŒ FS ๆœƒ็›ดๆŽฅๅฝฑ้Ÿฟ:

    • ๅคง้‡ๅฐๆช”ๆกˆ vs ๅคงๆช”ๆกˆ ็š„ๆ•ˆ่ƒฝๅทฎ็•ฐ
    • SSD ๅฃฝๅ‘ฝ(ๅฏซๅ…ฅๆ”พๅคง Write Amplification)
    • ่ณ‡ๆ–™ๅฏ้ ๆ€ง(Metadata、Checksum、RAID)
    • VM / Container ็š„็ฉฉๅฎšๅบฆ่ˆ‡้€Ÿๅบฆ
    • ่ƒฝๅฆๆไพ› Snapshot / Clone / Send-Receive
    • ่ƒฝๅฆๅฟซ้€Ÿๆ“ดๅฑ•

    ๆ‰€ไปฅๅฐ Linux ็ฎก็†่€…ไพ†่ชช,ๆช”ๆกˆ็ณป็ตฑ้ธ้Œฏ,ๆŸไบ›ๆƒ…ๆณ「ๆœƒ่ฎ“ๆ•ดๅฐไผบๆœๅ™จๅ ฑๅปข」。


    ไบŒ、EXT4 ๆทฑๅ…ฅๅ‰–ๆž(Journaling、Block Group、Inode、Extents)

    EXT4 ๆ˜ฏ็›ฎๅ‰ Linux ๆœ€ๆ™ฎ้็š„ FS,่ขซๅคง้‡็”จๆ–ผๅ‚ณ็ตฑ Web Server、 ๅฐๅž‹ DB、ๅ€‹ไบบ้›ป่…ฆ่ˆ‡ไธ€ไบ›ๅŸบๆœฌ VM ๅญ˜ๆ”พ็”จ้€”。

    ๅฎƒๅฑฌๆ–ผ EXT ็ณปๅˆ—ๆผ”้€ฒๅพŒ็š„ๆˆ็†ŸๆŠ€่ก“,็‰น้ปžๆ˜ฏ:

    • ็ฉฉๅฎš、็›ธๅฎนๆ€งๅฅฝ、่ณ‡ๆ–™็ตๆง‹็ฐกๅ–ฎ
    • ๅฏๅœจๅนพไนŽๆ‰€ๆœ‰ Linux ็™ผ่กŒ็‰ˆๅฎ‰ๅ…จไฝฟ็”จ
    • ้ฉๅˆ้€š็”จ็”จ้€”(General Purpose)

    ๐Ÿ“Œ EXT4 ็š„ๆžถๆง‹็ธฝ่ฆฝ(ASCII ๅœ–)

    EXT4 Filesystem Layout
    ---------------------------------------
    | Boot Sector | Superblock            |
    ---------------------------------------
    | Block Group #1                      |
    |  ├─ Block Bitmap                    |
    |  ├─ Inode Bitmap                    |
    |  ├─ Inode Table                     |
    |  └─ Data Blocks (Extents)           |
    ---------------------------------------
    | Block Group #2                      |
    |  ├─ Block Bitmap                    |
    |  ├─ Inode Bitmap                    |
    |  ├─ Inode Table                     |
    |  └─ Data Blocks                     |
    ---------------------------------------
    | ... repeated ...                    |
    ---------------------------------------
    

    EXT4 ็š„ๆ ธๅฟƒๆฆ‚ๅฟตๆ˜ฏ「ๅ€ๅกŠ็พค็ต„ Block Group」, ๆฏๅ€‹ Block Group ้ƒฝๅฏ่ƒฝๅŒ…ๅซ Bitmap、Inode Table ่ˆ‡่ณ‡ๆ–™ๅ€, ๅคฉ็”Ÿๅ…ทๆœ‰「ๅˆ†ๆ•ฃๅผ」็ตๆง‹,ๆœ‰ๅŠฉๆ–ผ้™ไฝŽ็ฃ็ขŸๅฐ‹้“็“ถ้ ธ。

    ๐Ÿ“Œ EXT4 Journaling(ๆ—ฅ่ชŒ)

    EXT4 ไฝฟ็”จ Metadata Journaling,้ธ้ …ๅฆ‚ไธ‹:

    • journal:่ณ‡ๆ–™่ˆ‡ metadata ้ƒฝๅฏซๅ…ฅ journal(ๆœ€ๅฎ‰ๅ…จ、ๆœ€ๆ…ข)
    • ordered(้ ่จญ):metadata ้€ฒ journal,่ณ‡ๆ–™ไธ้€ฒ(ๅฎ‰ๅ…จ+ๆ•ˆ่ƒฝๅนณ่กก)
    • writeback:ไธไฟ่ญ‰่ณ‡ๆ–™ๅฏซๅ…ฅ้ †ๅบ(ๆ•ˆ่ƒฝ้ซ˜、่ณ‡ๆ–™ๆœƒ้ซ’)

    ๐Ÿ“Œ Extents:EXT4 ๆœ€้‡่ฆ็š„ๆๅ‡

    EXT4 ๆจๆฃ„ๅ‚ณ็ตฑ block mapping,ๆ”น็”จ Extents:

    Extent (้‚่ผฏๅ€ๆฎต)
    ----------------------------------
    | [start block], [length]        |
    ----------------------------------
    ไพ‹ๅฆ‚:
    Block 1000 ~ 2000 ้ƒฝๆ˜ฏๅŒไธ€ๅ€‹ extent
    

    ๅ„ช้ปž:

    • ้ฟๅ…็ขŽ็‰‡ๅŒ–
    • ๅŠ ้€Ÿ sequential write
    • ็ฐกๅŒ– block index

    ๐Ÿ“Œ EXT4 Inode ็ตๆง‹ๆฆ‚ๅฟต

    Inode
    ------------------------------------
    | Metadata                        |
    | ├─ Owner UID/GID                |
    | ├─ Permission                   |
    | ├─ Timestamp                    |
    | ├─ Pointer to Extents           |
    | └─ Extended Attributes (xattr)  |
    ------------------------------------
    

    ๆฏๅ€‹ๆช”ๆกˆ็š„ๅ…งๅฎน้ƒฝๆ˜ฏๅพž Inode ๆŒ‡ๅ‘ Extents。

    ๐Ÿ“Œ EXT4 ๅ„ช้ปž

    • ๆˆ็†Ÿ、็ฉฉๅฎš、็›ธๅฎนๆ€งๆœ€ไฝณ
    • ้ฉๅˆๅคง้‡ๅฐๆช”ๆกˆ
    • ็ฝ้›ฃๅพŒ fsck ๆˆ็†Ÿ(ไฟฎๅพฉๆˆๅŠŸ็އ้ซ˜)
    • ๆŽ›่ผ‰้€Ÿๅบฆๅฟซ
    • ๅฏซๅ…ฅๅปถ้ฒไฝŽ(็„ก CoW)——้žๅธธ้ฉๅˆ DB ่ˆ‡้ซ˜ IOPS ่…ณๆœฌ

    ๐Ÿ“Œ EXT4 ็ผบ้ปž

    • ไธๆ”ฏๆดๅŽŸ็”Ÿ Snapshot(ๅฟซ็…ง)
    • ไธๆ”ฏๆด Checksum(่ณ‡ๆ–™ๅฎŒๆ•ดๆ€งๆฏ”ไธไธŠ ZFS/Btrfs)
    • ไธ้ฉๅˆๅคงๅž‹ๆช”ๆกˆๆˆ–้ซ˜ๅฎน้‡ๆ‡‰็”จ
    • ไธ่ƒฝ็ทšๆ€งๆ“ดๅ……ๆˆๅคš disk(้œ€้€้Ž LVM)

    ๐Ÿ“Œ EXT4 ๅฏฆๅ‹™ mount option ๅปบ่ญฐ

    mount -o defaults,noatime,nodiratime,errors=remount-ro /dev/sda1 /data

    noatime ๅฏ้กฏ่‘—้™ไฝŽๅคง้‡ๅฐๆช”ๆกˆ่ฎ€ๅ–ๆ™‚็š„ Metadata I/O。

    ๐Ÿ“Œ EXT4 ๅฏ็”จๅทฅๅ…ท

    # ๆŸฅ็œ‹ EXT4 ่ณ‡่จŠ
    sudo tune2fs -l /dev/sda1
    
    # ็ทšไธŠๆ“ดๅ……(LVM ไธ‹)
    sudo resize2fs /dev/mapper/vg0-lv0
    
    # ไฟฎๅพฉ(fsck)
    sudo fsck.ext4 /dev/sda1
    

    ๐Ÿ“Œ EXT4 ้ฉ็”จๆƒ…ๅขƒ

    • Web Server(ๅคง้‡ๅฐๆช”ๆกˆ)
    • ่ผ•้‡ VM、ๅฎนๅ™จ rootfs
    • ๅŸบๆœฌ DB(MySQL / MariaDB)
    • ้ž้ซ˜ๅฎน้‡ๅ ดๆ™ฏ

    ่‹ฅไฝ ้œ€่ฆๅฟซ็…ง、send/receive、ๅฎŒๆ•ด Checksum → EXT4 ไธ้ฉๅˆ。


    ➡️ Part 1 ็ตๆŸ,ไธ‹ไธ€ๆฎตๅฐ‡้–‹ๅง‹ XFS(ๅซ AG ๆžถๆง‹ๅœ–)、Btrfs(CoW、RAID10)、ZFS(Pool/ARC/ZIL/SLOG)

    ่ซ‹่ผธๅ…ฅ:้–‹ๅง‹ Part 2

    ไธ‰、XFS ๆžถๆง‹่งฃๆž(AG、Extent、Metadata、Scaling)

    XFS ๆ˜ฏ็”ฑ SGI ่จญ่จˆ็š„้ซ˜ๆ•ˆ่ƒฝ 64-bit ๆช”ๆกˆ็ณป็ตฑ,ๅœจ RHEL/CentOS、Rocky、AlmaLinux ็ญ‰ ไผๆฅญ็ดš็™ผ่กŒ็‰ˆไธญ่ขซ่ฆ–็‚บ「้ ่จญ」ๆŽจ่–ฆ FS,ๅฐคๅ…ถ้ฉ็”จๆ–ผ:

    • ๅคงๆช”ๆกˆ(ๅฝฑ็‰‡、ๆ˜ ๅƒๆช”、 VM disk)
    • ๅนณ่กŒ I/O ๅทฅไฝœ่ฒ ่ผ‰(่ณ‡ๆ–™ๆน–、ๅ‚™ไปฝ、ๅˆ†ๆ•ฃๅผๅ„ฒๅญ˜)
    • ้ซ˜ๅฎน้‡็ฃ็ขŸ(> 10TB)

    ๐Ÿ“Œ XFS ็š„ๆ ธๅฟƒ:Allocation Group(AG)

    XFS ๆœ€ๅคง็š„่จญ่จˆ้‡้ปžๆ˜ฏๅฐ‡ๆ•ดๅ€‹ๆช”ๆกˆ็ณป็ตฑๅˆ‡ๆˆๅคšๅ€‹็จ็ซ‹็š„ Allocation Groups(AG),ๆฏๅ€‹ AG ้ƒฝ่ƒฝ็จ็ซ‹่™•็† metadata ่ˆ‡ I/O, ้€™่ฎ“ XFS ่ƒฝๅค ๅผทๅŒ–「ๅนณ่กŒๅญ˜ๅ–」่ƒฝๅŠ›,ๆ˜ฏ VM Host、PB ็ดšๅ„ฒๅญ˜็š„ๅผท้ …。

    XFS Allocation Group Layout
    --------------------------------------------------------------------
    | AG #0 | AG #1 | AG #2 | AG #3 | ... | AG #N                       |
    --------------------------------------------------------------------
    ๆฏๅ€‹ AG ้ƒฝๅŒ…ๅซ:
      ├─ Superblock
      ├─ Inode B+Tree
      ├─ Free Space B+Tree
      ├─ Data Blocks
    --------------------------------------------------------------------
    

    ๐Ÿ“Œ XFS Metadata 100% ไฝฟ็”จ B+Tree

    ๅŒ…ๅซ:

    • Free space B+Tree
    • Inode B+Tree
    • Directory B+Tree

    ๅ› ๆญค XFS ๅœจๅคง้‡ๆช”ๆกˆ็›ฎ้Œ„、็ขŽ็‰‡ๆ•ด็†、่ณ‡ๆ–™ๆŸฅๆ‰พๆ™‚ๆ“ๆœ‰้žๅธธๅ„ช็ง€็š„็ฉฉๅฎšๅบฆ, ไธๆœƒๅƒ EXT4 ๅœจ็‰นๅฎšๆƒ…ๆณไธ‹ๆ•ˆ็އไธ‹้™。

    ๐Ÿ“Œ XFS Extent-based Allocation

    ๅ’Œ EXT4 ไธ€ๆจฃ,XFS ไนŸไฝฟ็”จ Extents,ไฝ† XFS ็š„ Extent ็ฎก็†ๆ›ด้ฉๅˆ่ถ…ๅคงๆช”ๆกˆ

    XFS Extent Example
    ----------------------------------
    | Logical Range | Physical Range |
    | 0-999         | block 20000    |
    | 1000-1999     | block 35000    |
    ----------------------------------
    

    ๐Ÿ“Œ XFS ๅ„ช้ปž

    • ๅนณ่กŒ I/O ่กจ็พๆฅตไฝณ(AG ๆžถๆง‹)
    • ้ฉๅˆๅคงๅž‹ๆช”ๆกˆ(VM disk、ๅฝฑๅƒ)
    • Metadata B+Tree ็ตๆง‹็ฉฉๅฎš
    • fsck ๅนพไนŽไธ้œ€่ฆ(metadata ๆ›ดไธ€่‡ด)
    • ๅฏ็ทšไธŠๅขž้•ท(Grow)

    ๐Ÿ“Œ XFS ็ผบ้ปž

    • ไธๆ”ฏๆด shrink(็„กๆณ•็ธฎๅฐ)
    • ไธๆ”ฏๆดๅŽŸ็”Ÿๅฟซ็…ง(้œ€ LVM ๆˆ–ๅ…ถไป–ๅทฅๅ…ท)
    • ไธๆ”ฏๆดๅŽŸ็”Ÿ Checksum(ไธๅฆ‚ Btrfs/ZFS)

    ๐Ÿ“Œ XFS ๅฏฆๅ‹™ๆŒ‡ไปค

    # ๆŸฅ็œ‹ XFS ็‹€ๆ…‹
    sudo xfs_info /dev/sda1
    
    # ็ทšไธŠๆ“ดๅ……
    sudo xfs_growfs /mountpoint
    
    # Metadata ๆชขๆŸฅ
    sudo xfs_repair /dev/sda1
    

    ๐Ÿ“Œ XFS ้ฉ็”จๆƒ…ๅขƒ

    • ่™›ๆ“ฌๆฉŸๅ„ฒๅญ˜(qcow2/raw)
    • ๅคงๆช”ๆกˆ、้ซ˜ๅฎน้‡็ฃ็ขŸ
    • ๅ‚™ไปฝๅ„ฒๅญ˜(้žๅŠ ๅฏ†)
    • ้ซ˜ไธฆ่กŒ็š„ I/O workload

    ๅ››、Btrfs:CoW、Subvolume、Snapshot、RAID ๅŽŸ็†

    Btrfs ๆ˜ฏ Linux ่ˆ‡ไผๆฅญ็•ŒๆœŸๆœ›ๆˆ็‚บ「ZFS ๆ›ฟไปฃๅ“」็š„่‡ช็”ฑๆช”ๆกˆ็ณป็ตฑ, ๆœ€ๅคง็š„็‰น่‰ฒๆ˜ฏ ๅฎŒๅ…จ CoW(Copy-on-Write)ๆžถๆง‹,ไธฆๅ…ทๆœ‰:

    • ๅŽŸ็”Ÿๅฟซ็…ง(Snapshot)
    • Subvolume(ๅฏ็จ็ซ‹็ฎก็†็š„ๅญๆช”ๆกˆ็ณป็ตฑ)
    • RAID0/1/10(ๅŽŸ็”Ÿ)
    • Send/Receive(็•ฐๅœฐๅขž้‡ๅŒๆญฅ)
    • Checksum(Metadata + Data)

    ๐Ÿ“Œ Btrfs CoW ๆžถๆง‹ๅœ–(ASCII)

    Btrfs CoW Write Path
    -------------------------------------------------------
    | Original Block | → | New Block Written              |
    | Metadata CoW   | → | Metadata Updated as New Nodes  |
    | Tree Root CoW  | → | Updated Tree Points to New Data|
    -------------------------------------------------------
    

    ้€™็จฎๆžถๆง‹่ฎ“ Snapshot ๅนพไนŽ「็žฌ้–“ๅฎŒๆˆ」,ไฝ†ไนŸ้€ ๆˆ: ๅฐๆช”ๆกˆๅคง้‡ๅฏซๅ…ฅๆœƒๅฐŽ่‡ด็ขŽ็‰‡่ˆ‡้ซ˜ๅปถ้ฒ

    ๐Ÿ“Œ Btrfs Subvolume ๆžถๆง‹

    Btrfs
    ├─ @ (rootfs)
    ├─ @home
    ├─ @log
    └─ @docker
    

    ๆฏๅ€‹ Subvolume ้ƒฝๅฏไปฅๆœ‰่‡ชๅทฑ็š„ Snapshot。

    ๐Ÿ“Œ Snapshot ็คบไพ‹

    # ๅปบ็ซ‹ snapshot
    sudo btrfs subvolume snapshot /data /data-snap-2025
    
    # ๆŸฅ็œ‹ subvol
    sudo btrfs subvolume list /data
    

    ๐Ÿ“Œ Btrfs RAID

    Btrfs ๆ”ฏๆด:

    • RAID0
    • RAID1(้›™ๅ‰ฏๆœฌ)
    • RAID10
    Btrfs RAID10 Layout
    ------------------------------------
    Disk1 ----\                /----Disk3
                \   Mirror    /
    Disk2 ----/    Stripe    \----Disk4
    ------------------------------------
    

    ๐Ÿ“Œ Send/Receive(้กžไผผ ZFS replication)

    # ็”ข็”Ÿ snapshot
    sudo btrfs subvolume snapshot /data /data-snap
    
    # ้€ๅ‡บๅˆฐๅฆไธ€ๅฐ(้€้Ž ssh)
    sudo btrfs send /data-snap | ssh host "btrfs receive /backup"
    

    ๐Ÿ“Œ Btrfs ๅ„ช้ปž

    • ๅŽŸ็”Ÿ Snapshot / Send-receive
    • ๆ”ฏๆด RAID10(็ฐกๅ–ฎๅˆๅฎ‰ๅ…จ)
    • ๆ”ฏๆด่ณ‡ๆ–™ + Metadata checksum
    • Subvolume ่จญ่จˆ้žๅธธๅฝˆๆ€ง

    ๐Ÿ“Œ Btrfs ็ผบ้ปž

    • ๅฏซๅ…ฅๅปถ้ฒ้ซ˜(ๅฐๆช”ๆกˆๅคง้‡ๆ›ดๆ–ฐ)
    • ๅ…ƒไปถๅฐšๆœชๅฆ‚ ZFS ็ฉฉๅฎš
    • ไธ้ฉๅˆ้ซ˜ๅฏซๅ…ฅ้‡็’ฐๅขƒ(VM、DB)
    • RAID5/6 ไธๅฏ็”จ(ไธ็ฉฉๅฎš)

    ๐Ÿ“Œ Btrfs ้ฉ็”จๆƒ…ๅขƒ

    • ๆกŒ้ข็ณป็ตฑ(Ubuntu/SUSE)
    • ้œ€่ฆ Snapshot ็š„ Web ๆ น็›ฎ้Œ„
    • ๅฝฑๅƒๅ„ฒๅญ˜、็‰ˆๆœฌๅŒ–ๆช”ๆกˆ
    • ๅคš็ฏ€้ปž็ฐกๆ˜“ๆช”ๆกˆๅŒๆญฅ(send/receive)

    ไบ”、ZFS:Pool、vdev、ARC、L2ARC、ZIL、SLOG、RAIDZ

    ZFS ่ขซๅ…ฌ่ช็‚บไธ–็•ŒไธŠๅŠŸ่ƒฝๆœ€ๅฎŒๆ•ดไธ”ๅฏ้ ็š„ๆช”ๆกˆ็ณป็ตฑ, Proxmox、TrueNAS、PBS ้ƒฝๆŽก็”จ ZFS ไฝœ็‚บไธปๅŠ› FS。

    ๆ ธๅฟƒ็‰น้ปž:

    • Pool(ๅ„ฒๅญ˜ๆฑ )ๆŠฝ่ฑกๅฑค
    • Copy-on-Write(ๅ…จ็ณป็ตฑ)
    • End-to-end Checksum(็ซฏๅˆฐ็ซฏ้ฉ—่ญ‰)
    • RAIDZ / Mirror / Triple Mirror
    • Snapshot / Clone / Send-Receive
    • ARC(ๅฟซๅ–)
    • ZIL / SLOG(ๅŒๆญฅๅฏซๅ…ฅๆ—ฅ่ชŒ)

    ๐Ÿ“Œ ZFS Pool/vdev ๆžถๆง‹(ASCII ๅœ–)

    ZFS Storage Pool
    ================================================================
    | zpool "tank"                                                 |
    |                                                              |
    |  vdev #1 (mirror)                                            |
    |     ├─ disk1                                                 |
    |     └─ disk2                                                 |
    |                                                              |
    |  vdev #2 (raidz1)                                            |
    |     ├─ disk3                                                 |
    |     ├─ disk4                                                 |
    |     └─ disk5                                                 |
    ================================================================
    

    ้‡่ฆๆฆ‚ๅฟต:

    • Pool = ๆ•ด้ซ”ๅ„ฒๅญ˜็ฉบ้–“
    • vdev = ๅปบ็ซ‹ Pool ็š„็ต„ๆˆๅ–ฎไฝ
    • Pool ็„กๆณ•็ธฎๅฐ(ไธๅฏ็ธฎๅฎน)

    ๐Ÿ“Œ ARC / L2ARC(ๅฟซๅ–)

    ZFS ๆ•ˆ่ƒฝๆ ธๅฟƒๅœจๆ–ผ:

    ARC(RAM) → L2ARC(SSD cache)
    

    ARC ๆ˜ฏ่จ˜ๆ†ถ้ซ”ๅฟซๅ–,ๆ•ˆๆžœๆฅต้ซ˜; L2ARC ๆ˜ฏ SSD ๅฟซๅ–,้ฉๅˆๅ†ท่ณ‡ๆ–™ๅŠ ้€Ÿ。

    ๐Ÿ“Œ ZIL / SLOG(ๅŒๆญฅๅฏซๅ…ฅ)

    ZIL(ZFS Intent Log)
    ------------------------------------
    | ๆšซๅญ˜ๅŒๆญฅๅฏซๅ…ฅ(sync write)        |
    ------------------------------------
    SLOG
    ------------------------------------
    | ๅฐˆ็”จ SSD,้™ไฝŽ ZIL ๅฏซๅ…ฅๅปถ้ฒ      |
    ------------------------------------
    

    ๅŒๆญฅๅฏซๅ…ฅๅคง้‡(ๅฆ‚ DB)→ ๅผท็ƒˆๅปบ่ญฐๅŠ  SLOG。

    ๐Ÿ“Œ RAIDZ1/2/3 ๆฆ‚ๅฟต

    RAIDZ1(ๅ–ฎๆ ก้ฉ—)
    -----------------------------------
    Disk1 | Disk2 | Disk3 | Parity
    -----------------------------------
    
    RAIDZ2(้›™ๆ ก้ฉ—)
    -----------------------------------
    Disk1 | Disk2 | Disk3 | Disk4 | 2×Parity
    -----------------------------------
    

    ๐Ÿ“Œ ZFS ๅ„ช้ปž

    • ่ณ‡ๆ–™ๆœ€ๅฎ‰ๅ…จ็š„ FS(checksum)
    • ๅฟซ็…ง、clone、send/receive ๆœ€ๆˆ็†Ÿ
    • ARC/L2ARC ๅคงๅน…ๆๅ‡ๆ•ˆ่ƒฝ
    • ๅฏซๅ…ฅ้ †ๅบ่ˆ‡ CoW ่ฎ“่ณ‡ๆ–™ไธ€่‡ดๆ€งๆฅต้ซ˜
    • ้žๅธธ้ฉๅˆ VM、PBS、NAS、่ณ‡ๆ–™ๆน–

    ๐Ÿ“Œ ZFS ็ผบ้ปž

    • ้œ€่ฆๅคง้‡่จ˜ๆ†ถ้ซ”(ๅปบ่ญฐ่‡ณๅฐ‘ 16GB)
    • ไธ้ฉๅˆ 1GB RAM ่ฟทไฝ ๆฉŸ
    • Pool ็„กๆณ•็ธฎๅฐ
    • ๅฏซๅ…ฅๆ”พๅคง(ๅคงๅฏซๅ…ฅ workload ้œ€ SSD/SLOG)

    ๐Ÿ“Œ ZFS ๅฏฆๅ‹™ๆŒ‡ไปค

    # ๅปบ็ซ‹ pool(mirror)
    sudo zpool create tank mirror /dev/sda /dev/sdb
    
    # ๆŸฅ็œ‹ pool
    sudo zpool status
    
    # ๅปบ็ซ‹ dataset
    sudo zfs create tank/vmdata
    
    # ๅ•Ÿ็”จๅฃ“็ธฎ
    sudo zfs set compression=lz4 tank
    
    # ๆŸฅ็œ‹ไฝฟ็”จ้‡
    sudo zfs list
    

    ๐Ÿ“Œ ZFS ้ฉ็”จๆƒ…ๅขƒ

    • Proxmox VE VM ๅ„ฒๅญ˜(SSD + RAIDZ)
    • TrueNAS、PBS、ZFS NAS
    • ้œ€่ฆ snapshot/clone ็š„ๅ ดๆ™ฏ
    • DevOps/CI pipeline ้œ€่ฆๅฟซ้€Ÿ rollback

    ➡️ Part 2 ็ตๆŸ,ไธ‹ไธ€ๆฎต Part 3 ๅฐ‡ๆไพ›:

    • ✔ SSD vs HDD vs NVMe ๆ•ˆ่ƒฝๆฏ”่ผƒ่กจ
    • ✔ ๅ››ๅคง FS ไฝฟ็”จๆƒ…ๅขƒๅฎŒๆ•ดๆฏ”่ผƒ็ธฝ่กจ(Web、DB、VM、NAS、ๅฎนๅ™จ)
    • ✔ ๆœ€็ต‚้ธๆ“‡ๅปบ่ญฐ(ไผๆฅญๅฏฆๅ‹™ๆŒ‡ๅ—)
    • ✔ ๅปถไผธ้–ฑ่ฎ€ๆจก็ต„
    • ✔ ไบ’ๅ‹•็•™่จ€ๆจก็ต„
    • ✔ JSON-LD(SEO ๅผทๅŒ–)

    ่ซ‹่ผธๅ…ฅ:้–‹ๅง‹ Part 3

    ๅ…ญ、ๆ•ˆ่ƒฝๆฏ”่ผƒ(SSD / HDD / NVMe ๅฏฆๅ‹™ๅทฎ็•ฐ)

    ไปฅไธ‹ๆฏ”่ผƒ็‚บๅœจ็œŸๅฏฆ็’ฐๅขƒ(SSD、HDD、NVMe)ไธญๅธธ่ฆ‹็š„ I/O ่กŒ็‚บ, ๆไพ›ๆ–นๅ‘ๆ€ง่ฉ•ไผฐ,ๅฏฆ้š›ๆ•ˆ่ƒฝไปๆœƒไพๅ„ฒๅญ˜ๆŽงๅˆถๅ™จ、ไฝˆๅฑ€、่จ˜ๆ†ถ้ซ”ๅคงๅฐ่€Œๆœ‰ๆ‰€ๅทฎ็•ฐ。

    ๐Ÿ“Œ 1. ๅคงๆช”ๆกˆ้€ฃ็บŒๅฏซๅ…ฅ(ๅฝฑ็‰‡、ๆ˜ ๅƒๆช”、VM disk)

    FileSystemHDDSSDNVMe่ชชๆ˜Ž
    EXT4ไธญไธญ้ซ˜้ซ˜Extents ๆœ‰ๅˆฉ้€ฃ็บŒๅฏซๅ…ฅ
    XFS้ซ˜้ซ˜ๆœ€้ซ˜AG ๆžถๆง‹ๆœ€้ฉๅˆๅคงๆช”ๆกˆ่ˆ‡ๅนณ่กŒ I/O
    BtrfsไธญไธญไธญCoW ๅฐŽ่‡ดๅปถ้ฒๅ้ซ˜
    ZFS้ซ˜้ซ˜้ซ˜ๆญ้… ARC/L2ARC、RAIDZ ๆฑบๅฎšๆ•ˆ่ƒฝ

    ๐Ÿ“Œ 2. ๅคง้‡ๅฐๆช”ๆกˆ(Web root、Git、Config、Logs)

    FileSystemๆ•ด้ซ”่กจ็พๅŽŸๅ› 
    EXT4ๆœ€ไฝณMetadata ๆ“ไฝœๆˆๆœฌไฝŽ
    XFSไธญ~้ซ˜Metadata B+Tree ็ฉฉๅฎš
    BtrfsๅทฎCoW ๅฐŽ่‡ด metadata ็ˆ†้‡ๆ›ดๆ–ฐ
    ZFSไธญCoW + checksum ๅฐŽ่‡ด้–‹้Šท็•ฅ้ซ˜

    ๐Ÿ“Œ 3. ่ณ‡ๆ–™ๅบซ(MySQL / PostgreSQL)

    FileSystemๆ•ˆ่ƒฝๅŽŸๅ› 
    EXT4้ซ˜็„ก CoW、ๅปถ้ฒไฝŽ,DB ๆœ€ๅธธ็”จ
    XFS้ซ˜Metadata ็ฉฉๅฎš + ๅคงไฝต็™ผๆ”ฏๆดๅฅฝ
    BtrfsๅทฎCoW ้€ ๆˆๅคง้‡ๅฏซๅ…ฅๆ…ข
    ZFS้ซ˜(SLOG ๅฟ…่ฆ)้œ€้—œ้–‰ sync ๆˆ–ไฝฟ็”จไฝŽๅปถ้ฒ SLOG

    ๐Ÿ“Œ 4. VM / ๅฎนๅ™จ(Proxmox、KVM、Docker)

    FileSystemVM DiskContainerๅ‚™่จป
    EXT4ไธญ้ซ˜้ฉๅˆ rootfs
    XFS้ซ˜้ซ˜RHEL ้ ่จญๆŽจ่–ฆ
    Btrfsๅทฎไธญไธ้ฉๅˆ้ซ˜ๅฏซๅ…ฅ VM
    ZFSๆœ€้ซ˜้ซ˜Proxmox ๆŽจ่–ฆ

    ไธƒ、ๅฏฆๅ‹™ไฝฟ็”จๆƒ…ๅขƒ:ๅ“ชๅ€‹ FS ้ฉๅˆๅ“ช็จฎ็”จ้€”?

    ไปฅไธ‹ไปฅ็พไปฃไผๆฅญ่ˆ‡ๅ€‹ไบบๅธธ่ฆ‹ๆƒ…ๅขƒไฝœๅฎŒๆ•ดๅปบ่ญฐ。

    ๐Ÿ“Œ Web Server(Nginx/Apache)

    • EXT4:ๆœ€ไฝณ(ๅคง้‡ๅฐๆช”ๆกˆ)
    • XFS:้ฉๅˆ่ผƒๅคงๆช”ๆกˆ็š„็ถฒ็ซ™
    • Btrfs:ไธๅปบ่ญฐ(ๅฐๆช”ๆกˆๅฏซๅ…ฅๆ…ข)
    • ZFS:ๅฏ็”จ,ไฝ†ๆˆๆœฌ้ซ˜

    ๐Ÿ“Œ Database(MySQL/PostgreSQL)

    • EXT4:ๆœ€ไฝณ
    • XFS:ๆœ€ไฝณ
    • Btrfs:ไธๆŽจ่–ฆ
    • ZFS:ๅฏ,ไฝ†้œ€ SLOG / sync=disabled

    ๐Ÿ“Œ VM(Proxmox / KVM / ESXi ไปฅ raw/qcow2)

    • XFS:้ซ˜้€Ÿ VM Disk(qcow2/random IO ่กจ็พ้žๅธธๅฅฝ)
    • ZFS:ๆœ€ไฝณ(snapshot + clone + send)
    • EXT4:ๅฏ็”จไฝ†้žๆœ€ๅ„ช
    • Btrfs:ไธๅปบ่ญฐ

    ๐Ÿ“Œ Linux Container(Docker / LXC)

    • EXT4:ๆœ€ไฝณ
    • XFS:ๆฌกไฝณ(CentOS ้ ่จญ)
    • Btrfs:ๅฏ็”จไฝ†่ฆๆณจๆ„็ขŽ็‰‡ๅŒ–
    • ZFS:ๆ•ˆ่ƒฝๅฅฝไฝ†ไฝ”็”จ่จ˜ๆ†ถ้ซ”ๅคง

    ๐Ÿ“Œ NAS / ๅฎถๅบญ้›ฒ(ๆช”ๆกˆไผบๆœๅ™จ)

    • ZFS:ๆœ€ไฝณ(Checksum + snapshot)
    • Btrfs:ๆฌกไฝณ(็ฐกๆ˜“ NAS)
    • XFS:็ฌฌไธ‰(ๅƒ…่ณ‡ๆ–™ๆน–)
    • EXT4:ๅƒ…ๅŸบๆœฌ็”จ้€”

    ๐Ÿ“Œ Proxmox Backup Server(PBS)

    • ZFS:ๅฎ˜ๆ–นๆŽจ่–ฆ
    • XFS:ๅฏ็”จไฝ†ๆฒ’ๆœ‰ snapshot

    ๅ…ซ、ๅ››ๅคงๆช”ๆกˆ็ณป็ตฑๅฎŒๆ•ดๆฏ”่ผƒ่กจ(ๆญฃๅผ็‰ˆ็ธฝ่กจ)

    ้ …็›ฎ EXT4 XFS Btrfs ZFS
    ๆˆ็†Ÿๅบฆๆœ€้ซ˜้ซ˜ไธญๆœ€้ซ˜
    ๅฏซๅ…ฅๆจกๅž‹้ž CoW้ž CoWCoWCoW
    ๅฟซ็…ง็„ก็„กๆœ‰ๆœ‰
    Send/Receive็„ก็„กๆœ‰ๆœ‰
    Checksum(่ณ‡ๆ–™ๅฎŒๆ•ดๆ€ง) ็„ก็„กๆœ‰ๆœ‰(ๆœ€ๅฎŒๆ•ด)
    ๆ“ดๅ……ๅˆ†ๅ‰ฒ ๅฏ(LVM)ๅฏ(Grow Only)ๅฏไธๅฏ็ธฎๅฐ
    ้ฉๅˆๅฐๆช”ๆกˆๆœ€ไฝณ้ซ˜ๅทฎไธญ
    ้ฉๅˆๅคงๆช”ๆกˆไธญๆœ€้ซ˜ไธญ้ซ˜
    VM/่™›ๆ“ฌๅŒ–ไธญ้ซ˜ๅทฎๆœ€้ซ˜(snapshot)
    ่ณ‡ๆ–™ๅบซ้ซ˜้ซ˜ๅทฎ้ซ˜(้œ€ SLOG)
    NAS/ๅ‚™ไปฝไฝŽไธญไธญๆœ€้ซ˜
    ่จ˜ๆ†ถ้ซ”้œ€ๆฑ‚ไฝŽไฝŽไฝŽ้ซ˜(16GB+)
    ๆœ€ไฝณไฝฟ็”จๆƒ…ๅขƒ Web、ๅฐๆช”ๆกˆ、DB VM、ๅคงๆช”ๆกˆ Snapshot、Desktop NAS、ๅคงๅฎน้‡、VM、PBS

    ไน、ๆœ€็ต‚้ธๆ“‡ๆŒ‡ๅ—(็ต่ซ–)

    ๅฆ‚ๆžœไฝ ๅชๆƒณ็Ÿฅ้“「ๆœ€็ฐกๅ–ฎ็š„้ธๆ“‡ๆ–นๅผ」,ไปฅไธ‹ๆ˜ฏๆœ€้‡่ฆ็š„็ต่ซ–:

    ๐Ÿ“Œ 1. ไธ€่ˆฌ Linux ไผบๆœๅ™จ → ้ธ EXT4

    ็ฉฉๅฎš、ไฝŽๅปถ้ฒ、็ฐกๅ–ฎ、ๅฎ‰ๅ…จ,ๆ‰€ๆœ‰็™ผ่กŒ็‰ˆ้ƒฝๆ”ฏๆด。

    ๐Ÿ“Œ 2. ๅคงๅฎน้‡、้ซ˜ I/O ๅทฅไฝœ่ฒ ่ผ‰ → ้ธ XFS

    ๆœ€ๅฅฝ่™•็†ๅคงๆช”ๆกˆ,ๅนณ่กŒๅฏซๅ…ฅไธ€ๆต。

    ๐Ÿ“Œ 3. ้œ€่ฆ Snapshot / Send / ๅญๅท → ้ธ Btrfs

    ๆกŒ้ข็’ฐๅขƒๆœ€ไฝณ;ไผบๆœๅ™จไธๅปบ่ญฐ้ซ˜ๅฏซๅ…ฅไฝฟ็”จ。

    ๐Ÿ“Œ 4. ่ฆๆœ€ๅฎ‰ๅ…จ、ๆœ€ๅฎŒๆ•ดๅŠŸ่ƒฝ、ๆœ€้ซ˜้šŽ FS → ้ธ ZFS

    Proxmox / NAS / PBS ้ฆ–้ธ,ไนŸๆ˜ฏไผๆฅญ็ดšๆœ€ไฝณ่งฃ。


    ๐Ÿ”— ๅปถไผธ้–ฑ่ฎ€


    ๐Ÿ’ฌ ไบ’ๅ‹•็•™่จ€

    ๐Ÿ’ก 「็•™ไธ‹ไฝ ็š„่ง€้ปž,่ฎ“่จŽ่ซ–ๆ›ด็ฒพๅฝฉ!」 ไฝ ไฝฟ็”จๅ“ช็จฎ FileSystem?้‡้Žๅ“ชไบ›ๆ•ˆ่ƒฝๆˆ–ๅฏ้ ๆ€งๅ•้กŒ?

    • ไฝ ๆœƒๆŽจ่–ฆ EXT4、XFS、Btrfs ้‚„ๆ˜ฏ ZFS?็‚บไป€้บผ?
    • ๅœจ VM ๆˆ–่ณ‡ๆ–™ๅบซไธญ,ไฝ ็š„ FS ้ธๆ“‡ๆœ‰ๆ”น่ฎŠ้Žๅ—Ž?
    • ไฝ ๆƒณ็œ‹ไธ‹ไธ€็ฏ‡ Filesystem / Storage ไธป้กŒๆ˜ฏไป€้บผ?

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš