ื•ื•ืึธืก ื”ืึธื‘ืŸ LVM ืื•ืŸ Matryoshka ืื™ืŸ ืคึผืจืึธืกื˜?

ื’ื•ื˜ ื˜ืึธื’.
ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื˜ื™ื™ืœืŸ ืžื™ื˜ ื“ื™ ืงื”ืœ ืžื™ื™ืŸ ืคึผืจืึทืงื˜ื™ืฉ ื“ืขืจืคืึทืจื•ื ื’ ืคื•ืŸ ื‘ื•ื™ืขืŸ ืึท ื“ืึทื˜ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ืกื™ืกื˜ืขื ืคึฟืึทืจ KVM ื ื™ืฆืŸ md RAID + LVM.

ื“ืขืจ ืคึผืจืึธื’ืจืึทื ื•ื•ืขื˜ ืึทืจื™ื™ึทื ื ืขืžืขืŸ:

  • ื‘ื ื™ืŸ md RAID 1 ืคึฟื•ืŸ NVMe SSD.
  • ืึทืกืขืžื‘ืึทืœ md RAID 6 ืคึฟื•ืŸ SATA SSD ืื•ืŸ ืจืขื’ื•ืœืขืจ ื“ืจื™ื™ื•ื•ื–.
  • ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ TRIM / DISCARD ืึธืคึผืขืจืึทืฆื™ืข ืื•ื™ืฃ SSD RAID 1/6.
  • ืฉืึทืคึฟืŸ ืึท ื‘ืึธืึธื˜ืึทื‘ืœืข MD RAID 1/6 ืžืขื ื’ืข ืื•ื™ืฃ ืึท ืคึผืจืึธืกื˜ ื’ืึทื ื’ ืคื•ืŸ ื“ื™ืกืงืก.
  • ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ ืกื™ืกื˜ืขื ืื•ื™ืฃ NVMe RAID 1 ื•ื•ืขืŸ ืขืก ืื™ื– ืงื™ื™ืŸ NVMe ืฉื˜ื™ืฆืŸ ืื™ืŸ ื“ื™ ื‘ื™ื™ืึธื•ืก.
  • ื ื™ืฆืŸ LVM ืงืึทืฉ ืื•ืŸ LVM ื“ื™ืŸ.
  • ื ื™ืฆืŸ BTRFS ืกื ืึทืคึผืฉืึทืฅ ืื•ืŸ ืฉื™ืงืŸ / ื‘ืึทืงื•ืžืขืŸ ืคึฟืึทืจ ื‘ืึทืงืึทืคึผ.
  • ื ื™ืฆืŸ LVM ื“ื™ืŸ ืกื ืึทืคึผืฉืึทืฅ ืื•ืŸ thin_delta ืคึฟืึทืจ BTRFS ืกื˜ื™ืœ ื‘ืึทืงืึทืคึผืก.

ืื•ื™ื‘ ืื™ืจ ื–ืขื ื˜ ืื™ื ื˜ืขืจืขืกื™ืจื˜, ื‘ื™ื˜ืข ื–ืขืŸ ืงืึทืฅ.

ื•ื™ืกื–ืึธื’ื•ื ื’

ื“ืขืจ ืžื—ื‘ืจ ื˜ื•ื˜ ื ื™ืฉื˜ ื˜ืจืึธื’ืŸ ืงื™ื™ืŸ ืคึฟืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขื›ืงื™ื™ื˜ ืคึฟืึทืจ ื“ื™ ืงืึทื ืกืึทืงื•ื•ืขื ืกืึทื– ืคื•ืŸ ื ื™ืฆืŸ ืึธื“ืขืจ ื ื™ื˜ ื ื™ืฆืŸ ืžืึทื˜ืขืจื™ืึทืœืก / ื‘ื™ื™ืฉืคื™ืœืŸ / ืงืึธื“ / ืขืฆื•ืช / ื“ืึทื˜ืŸ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ. ื“ื•ืจืš ืœื™ื™ืขื ืขืŸ ืึธื“ืขืจ ื ื™ืฆืŸ ื“ืขื ืžืึทื˜ืขืจื™ืึทืœ ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืขื’, ืื™ืจ ื ืขืžืขืŸ ืคึฟืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขื›ืงื™ื™ื˜ ืคึฟืึทืจ ืึทืœืข ืงืึทื ืกืึทืงื•ื•ืขื ืกืึทื– ืคื•ืŸ ื“ื™ ืึทืงืฉืึทื ื–. ืžืขื’ืœืขืš ืงืึทื ืกืึทืงื•ื•ืขื ืกืึทื– ืึทืจื™ื™ึทื ื ืขืžืขืŸ:

  • ืงืจื•ื›ืœืข ื’ืขืคึผืจืขื’ืœื˜ NVMe SSDs.
  • ื’ืึธืจ ื’ืขื•ื•ื™ื™ื ื˜ ืจืขืงืึธืจื“ื™ื ื’ ืžื™ื˜ืœ ืื•ืŸ ื“ื•ืจื›ืคืึทืœ ืคื•ืŸ SSD ื“ืจื™ื™ื•ื•ื–.
  • ื’ืึทื ืฅ ืึธื ื•ื•ืขืจ ืคื•ืŸ ืึทืœืข ื“ืึทื˜ืŸ ืื•ื™ืฃ ืึทืœืข ื“ืจื™ื™ื•ื•ื–, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื‘ืึทืงืึทืคึผ ืงืืคื™ืขืก.
  • ืคืึธืœื˜ื™ ืงืึธืžืคึผื™ื•ื˜ืขืจ ื™ื™ึทื–ื ื•ื•ืึทืจื’.
  • ื•ื•ื™ืกื˜ ืฆื™ื™ื˜, ื ืขืจื•ื•ืขืก ืื•ืŸ ื’ืขืœื˜.
  • ืงื™ื™ืŸ ืื ื“ืขืจืข ืคืืœื’ืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ืœื™ืกื˜ืขื“ ืื•ื™ื‘ืŸ.

ืื™ื™ึทื–ืŸ

ื‘ื ื™ืžืฆื ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ:

ืžืึธื˜ื”ืขืจื‘ืึธืึทืจื“ ืคื•ืŸ ืึทืจื•ื 2013 ืžื™ื˜ Z87 ื˜ืฉื™ืคึผืกืขื˜, ื’ืึทื ืฅ ืžื™ื˜ Intel Core i7 / Haswell.

  • ืคึผืจืึทืกืขืกืขืจ 4 ืงืึธืจืขืก, 8 ืคึฟืขื“ืขื
  • 32 GB DDR3 ื‘ืึทืจืึทืŸ
  • 1 x 16 ืึธื“ืขืจ 2 x 8 PCIe 3.0
  • 1 ืจืขื ื˜ื’ืขื  4 + 1 ืจืขื ื˜ื’ืขื  1 ืคึผืกื™ืข 2.0
  • 6 ืจืขื ื˜ื’ืขื  6 ื’ื™ื’ืื‘ื™ื™ื˜ ืกืึทื˜ืึท 3 ืงืึทื ืขืงื˜ืขืจื–

SAS ืึทื“ืึทืคึผื˜ืขืจ LSI SAS9211-8I ืคืœืึทืฉื˜ ืฆื• IT / HBA ืžืึธื“ืข. RAID-ืขื ื™ื™ื‘ืึทืœื“ ืคื™ืจืžื•ื•ืึทืจืข ืื™ื– ื‘ืขืงื™ื•ื•ืŸ ืจื™ืคึผืœื™ื™ืกื˜ ืžื™ื˜ HBA ืคื™ืจืžื•ื•ืึทืจืข ืฆื•:

  1. ืื™ืจ ืงืขื ืขืŸ ื•ื•ืึทืจืคืŸ ืื•ื™ืก ื“ืขื ืึทื“ืึทืคึผื˜ืขืจ ืื™ืŸ ืงื™ื™ืŸ ืฆื™ื™ื˜ ืื•ืŸ ืคืึทืจื‘ื™ื™ึทื˜ืŸ ืขืก ืžื™ื˜ ืงื™ื™ืŸ ืื ื“ืขืจืข ื•ื•ืึธืก ืื™ืจ ื”ืึธื˜ ื’ืขืคึฟื•ื ืขืŸ.
  2. TRIM / Discard ื’ืขืืจื‘ืขื˜ ื ืึธืจืžืึทืœื™ ืื•ื™ืฃ ื“ื™ืกืงืก, ื•ื•ื™ื™ึทืœ ... ืื™ืŸ RAID ืคื™ืจืžื•ื•ืึทืจืข ื“ื™ ืงืึทืžืึทื ื“ื– ื–ืขื ืขืŸ ื ื™ืฉื˜ ื’ืขืฉื˜ื™ืฆื˜ ืื™ืŸ ืึทืœืข, ืื•ืŸ ื“ื™ HBA, ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื˜ื•ื˜ ื ื™ืฉื˜ ื–ืึธืจื’ืŸ ื•ื•ืึธืก ืงืึทืžืึทื ื“ื– ื–ืขื ืขืŸ ื˜ืจืึทื ืกืžื™ื˜ื˜ืขื“ ืื™ื‘ืขืจ ื“ื™ ื•ื™ื˜ืึธื‘ื•ืก.

ืฉื•ื•ืขืจ ื“ืจื™ื™ื•ื•ื– - 8 ื‘ืจืขืงืœืขืš ืคื•ืŸ HGST Travelstar 7K1000 ืžื™ื˜ ืึท ืงืึทืคึผืึทืฆื™ื˜ืขื˜ ืคื•ืŸ 1 ื˜ื‘ ืื™ืŸ ืึท 2.5 ืคืึธืจืขื ืคืึทืงื˜ืึธืจ, ื•ื•ื™ ืคึฟืึทืจ ืœืึทืคึผื˜ืึทืคึผืก. ื“ื™ ื“ืจื™ื™ื•ื•ื– ื–ืขื ืขืŸ ืคืจื™ืขืจ ืื™ืŸ ืึท RAID 6 ืžืขื ื’ืข. ื–ื™ื™ ื•ื•ืขืœืŸ ืื•ื™ืš ื ื•ืฆืŸ ื“ื™ ื ื™ื™ึทืข ืกื™ืกื˜ืขื. ืฆื• ืงืจืึธื ื”ื™ื’ืข ื‘ืึทืงืึทืคึผืก.

ื“ืขืจืฆื• ืฆื•ื’ืขืœื™ื™ื’ื˜:

6 ืกืึทื˜ืึท ืกืกื“ ืžืึธื“ืขืœ ืกืึทืžืกื•ื ื’ 860 ืงื•ื•ืึธ 2 ื˜ื‘. ื“ื™ SSDs ืคืืจืœืื ื’ื˜ ืึท ื’ืจื•ื™ืก ื‘ืึทื ื“, ื“ื™ ื‘ื™ื™ึทื–ื™ื™ึทืŸ ืคื•ืŸ ืึท SLC ืงืึทืฉ, ืจื™ืœื™ื™ืึทื‘ื™ืœืึทื˜ื™ ืื•ืŸ ืึท ื ื™ื“ืขืจื™ืง ืคึผืจื™ื™ึทื– ื–ืขื ืขืŸ ื’ืขื•ื•ืืœื˜. ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืึทื•ื•ืขืงื•ื•ืึทืจืคืŸ / ื ื•ืœ ืื™ื– ืคืืจืœืื ื’ื˜, ื•ื•ืึธืก ืื™ื– ืึธืคึผื’ืขืฉื˜ืขืœื˜ ื“ื•ืจืš ื“ื™ ืฉื•ืจื” ืื™ืŸ dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

2 NVMe SSD ืžืึธื“ืขืœ ืกืึทืžืกื•ื ื’ ืกืกื“ 970 ืขื•ื•ืึธ 500 ื’ื™ื’ืื‘ื™ื™ื˜.

ืคึฟืึทืจ ื“ื™ SSDs, ื˜ืจืึทืค - ืœื™ื™ืขื ืขืŸ / ืฉืจื™ื™ึทื‘ืŸ ื’ื™ื›ืงื™ื™ึทื˜ ืื•ืŸ ืžื™ื˜ืœ ืงืึทืคึผืึทืฆื™ื˜ืขื˜ ืคึฟืึทืจ ื“ื™ื™ืŸ ื‘ืื“ืขืจืคืขื ื™ืฉืŸ ื–ืขื ืขืŸ ื•ื•ื™ื›ื˜ื™ืง. ืจืึทื“ื™ืึทื˜ืึธืจ ืคึฟืึทืจ ื–ื™ื™. ื“ืึทื•ื•ืงืข. ืœืขื’ืึทืžืจืข. ืึทื ื“ืขืจืฉ, ืคึผืจืขื’ืœืขืŸ ื–ื™ื™ ื‘ื™ื– ืงืจื™ืกืคึผื™ ื‘ืขืฉืึทืก ื“ืขืจ ืขืจืฉื˜ืขืจ RAID ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ.

StarTech PEX8M2E2 ืึทื“ืึทืคึผื˜ืขืจ ืคึฟืึทืจ 2 X NVMe SSD ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื™ืŸ PCIe 3.0 8x ืฉืคึผืขืœื˜ืœ. ื“ืึธืก, ื•ื•ื™ื“ืขืจ, ืื™ื– ื ืึธืจ ืึทืŸ HBA, ืึธื‘ืขืจ ืคึฟืึทืจ NVMe. ืขืก ืื™ื– ืึทื ื“ืขืจืฉ ืคื•ืŸ ื‘ื™ืœื™ืง ืึทื“ืึทืคึผื˜ืขืจื– ืื™ืŸ ืึทื– ืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ื“ืึทืจืคืŸ PCIe ื‘ื™ืคื•ืจืงืึทื˜ื™ืึธืŸ ืฉื˜ื™ืฆืŸ ืคื•ืŸ ื“ื™ ืžืึธื˜ื”ืขืจื‘ืึธืึทืจื“ ืจืขื›ื˜ ืฆื• ื“ืขื ื‘ื™ื™ึทื–ื™ื™ึทืŸ ืคื•ืŸ ืึท ื’ืขื‘ื•ื™ื˜-ืื™ืŸ PCIe ื‘ืึทืฉื˜ื™ืžืขืŸ. ืขืก ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ืืคื™ืœื• ืื™ืŸ ื“ื™ ืžืขืจืกื˜ ืืœื˜ืข ืกื™ืกื˜ืขื ืžื™ื˜ PCIe, ืืคื™ืœื• ืื•ื™ื‘ ืขืก ืื™ื– ืึทืŸ X1 PCIe 1.0 ืฉืคึผืขืœื˜ืœ. ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ืื™ืŸ ื“ื™ ืฆื•ื ืขืžืขืŸ ื’ื™ื›ืงื™ื™ึทื˜. ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ RAIDs ื“ืึธืจื˜. ืขืก ืื™ื– ืงื™ื™ืŸ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ื‘ื™ื™ืึธื•ืก ืื•ื™ืฃ ื‘ืจืขื˜. ืึทื–ื•ื™, ื“ื™ื™ืŸ ืกื™ืกื˜ืขื ื•ื•ืขื˜ ื ื™ืฉื˜ ืžืึทื“ื–ืฉื™ืงืึทืœื™ ืœืขืจื ืขืŸ ืฆื• ืฉื˜ื™ื•ื•ืœ ืžื™ื˜ NVMe, ืคื™ืœ ื•ื•ื™ื™ื ื™ืงืขืจ ื˜ืึธืŸ NVMe RAID ื“ืึทื ืง ืฆื• ื“ืขื ืžื™ื˜ืœ.

ื“ืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืœื•ื™ื– ืจืขื›ื˜ ืฆื• ื“ืขื ื‘ื™ื™ึทื–ื™ื™ึทืŸ ืคื•ืŸ ื‘ืœื•ื™ื– ืื™ื™ืŸ ืคืจื™ื™ 8 ืงืก PCIe 3.0 ืื™ืŸ ื“ื™ ืกื™ืกื˜ืขื, ืื•ืŸ ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ 2 ืคืจื™ื™ ืกืœืึธืฅ, ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ืคึผืœื™ื™ืกื˜ ืžื™ื˜ ืฆื•ื•ื™ื™ ืคึผืขื ื™ PEX4M2E1 ืึธื“ืขืจ ืึทื ืึทืœืึธื’ื•ืขืก, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืงื•ื™ืคื˜ ืขืจื’ืขืฅ ืฆื• ืึท ืคึผืจื™ื™ึทื– ืคื•ืŸ 600. ืจื•ื‘ืœ.

ื“ื™ ืจื™ื“ื–ืฉืขืงืฉืึทืŸ ืคื•ืŸ ืึทืœืข ืžื™ื ื™ื ืคื•ืŸ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืึธื“ืขืจ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ื˜ืฉื™ืคึผืกืขื˜ / ื‘ื™ืึธืก RAIDs ืื™ื– ื’ืขืžืื›ื˜ ื“ื™ืœื™ื‘ืจืึทื˜ืœื™, ืฆื• ืงืขื ืขืŸ ื’ืึธืจ ืคืึทืจื‘ื™ื™ึทื˜ืŸ ื“ื™ ื’ืื ืฆืข ืกื™ืกื˜ืขื, ืžื™ื˜ ื“ื™ ื•ื™ืกื ืขื ืคื•ืŸ ื“ื™ SSD / HDD ื–ื™ืš, ื‘ืฉืขืช ืคึผืจืึทื–ืขืจื•ื•ื™ื ื’ ืึทืœืข ื“ื™ ื“ืึทื˜ืŸ. ื™ื“ืขืึทืœืœื™, ืึทื–ื•ื™ ืื™ืจ ืงืขื ืขืŸ ืจืึทื˜ืขื•ื•ืขืŸ ืืคื™ืœื• ื“ื™ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื ื•ื•ืขืŸ ืื™ืจ ืžืึทืš ืฆื• ื’ืึธืจ ื ื™ื™ึท / ืึทื ื“ืขืจืฉ ื™ื™ึทื–ื ื•ื•ืึทืจื’. ื“ื™ ื”ื•ื™ืคึผื˜ ื–ืึทืš ืื™ื– ืึทื– ืขืก ื–ืขื ืขืŸ SATA ืื•ืŸ PCIe ืคึผืึธืจืฅ. ืขืก ืื™ื– ื•ื•ื™ ืึท ืœืขื‘ืŸ ืงืึธืžืคึผืึทืงื˜ื“ื™ืกืง ืึธื“ืขืจ ื‘ืึธืึธื˜ืึทื‘ืœืข ื‘ืœื™ืฅ ืคืึธืจ, ื ืึธืจ ื–ื™ื™ืขืจ ืฉื ืขืœ ืื•ืŸ ืึท ื‘ื™ืกืœ ื‘ืึทืœืงื™.

ื”ื•ืžืึธืจืึทื ื“ืขืจืฉ, ืื™ืจ ื•ื•ื™ืกืŸ ื•ื•ืึธืก ื›ืึทืคึผืึทื ื– - ืžืืœ ืื™ืจ ืขืจื“ื–ืฉืึทื ื˜ืœื™ ื“ืึทืจืคึฟืŸ ืฆื• ื ืขืžืขืŸ ื“ื™ ื’ืื ืฆืข ืžืขื ื’ืข ืžื™ื˜ ืื™ืจ ืฆื• ื ืขืžืขืŸ ืึทื•ื•ืขืง. ืึธื‘ืขืจ ืื™ืš ื˜ืึธืŸ ื ื™ืฉื˜ ื•ื•ืขืœืŸ ืฆื• ืคืึทืจืœื™ืจืŸ ื“ืึทื˜ืŸ. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืึทืœืข ื“ื™ ื“ืขืจืžืื ื˜ ืžื™ื“ื™ืึท ื–ืขื ืขืŸ ืงืึทื ื•ื•ื™ื ื™ืึทื ื˜ืœื™ ืœื™ื’ืŸ ืื•ื™ืฃ ื“ื™ ืกืœื™ื™ื“ื– ืื™ืŸ ื“ื™ 5.25 ื‘ื™ื™ืก ืคื•ืŸ ื“ื™ ื ืึธืจืžืึทืœ ืคืึทืœ.

ื ื•, ืื•ืŸ, ืคื•ืŸ ืงื•ืจืก, ืคึฟืึทืจ ืขืงืกืคึผืขืจื™ืžืขื ื˜ื™ื ื’ ืžื™ื˜ ืคืึทืจืฉื™ื“ืขื ืข ืžืขื˜ื”ืึธื“ืก ืคื•ืŸ ืกืกื“ ืงืึทื˜ืฉื™ื ื’ ืื™ืŸ ืœื™ื ื•ืงืก.

ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืจื™ื™ื“ื– ื–ืขื ืขืŸ ื ื•ื“ื ืข. ืงืขืจ ืขืก ืื•ื™ืฃ. ืขืก ืึทืจื‘ืขื˜ ืึธื“ืขืจ ื ื™ืฉื˜. ืื•ืŸ ืžื™ื˜ ืžื“ื“ื ืขืก ื–ืขื ืขืŸ ืฉื˜ืขื ื“ื™ืง ืึธืคึผืฆื™ืขืก.

ื•ื•ื™ื™ืš

ื‘ื™ื– ืึทื”ืขืจ, Debian 8 Jessie ืื™ื– ื’ืขื•ื•ืขืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ื™ืฃ ื“ื™ ื™ื™ึทื–ื ื•ื•ืึทืจื’, ื•ื•ืึธืก ืื™ื– ื ืึธืขื ื˜ ืฆื• EOL. RAID 6 ืื™ื– ื’ืขื•ื•ืขืŸ ืคืืจื–ืืžืœื˜ ืคื•ืŸ ื“ื™ ืื•ื™ื‘ืŸ ื“ืขืจืžืื ื˜ ื”ื“ื“ ืก ืคึผืขืจื“ ืžื™ื˜ LVM. ืขืก ืœื•ื™ืคืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ืื™ืŸ kvm/libvirt.

ื•ื•ื™ื™ึทืœ ื“ืขืจ ืžื—ื‘ืจ ื”ืื˜ ืคึผืึทืกื™ืง ื“ืขืจืคืึทืจื•ื ื’ ืื™ืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืคึผืึธืจื˜ืึทื˜ื™ื•ื• ื‘ืึธืึธื˜ืึทื‘ืœืข SATA / NVMe ื‘ืœื™ืฅ ื“ืจื™ื™ื•ื•ื–, ืื•ืŸ ืื•ื™ืš, ืื™ืŸ ืกื“ืจ ื ื™ืฉื˜ ืฆื• ื‘ืจืขื›ืŸ ื“ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืคื™ื™ื™ืง ื˜ืขืžืคึผืœืึทื˜ืข, Ubuntu 18.04 ืื™ื– ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ื•ื•ื™ ื“ื™ ืฆื™ืœ ืกื™ืกื˜ืขื, ื•ื•ืึธืก ืื™ื– ืฉื•ื™ืŸ ื’ืขื ื•ื’ ืกื˜ื™ื™ื‘ืึทืœื™ื™ื–ื“, ืึธื‘ืขืจ ื ืึธืš 3 ื™ืึธืจ ืคื•ืŸ ืฉื˜ื™ืฆืŸ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜.

ื“ื™ ื“ืขืจืžืื ื˜ ืกื™ืกื˜ืขื ื›ึผื•ืœืœ ืึทืœืข ื“ื™ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ื“ืจื™ื•ื•ืขืจืก ื•ื•ืึธืก ืžื™ืจ ื“ืึทืจืคึฟืŸ ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ. ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืงื™ื™ืŸ ื“ืจื™ื˜-ืคึผืึทืจื˜ื™ื™ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืึธื“ืขืจ ื“ืจื™ื•ื•ืขืจืก.

ืคึผืจืขืคึผืึทืจื™ื ื’ ืคึฟืึทืจ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’

ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืกื™ืกื˜ืขื ืžื™ืจ ื“ืึทืจืคึฟืŸ Ubuntu ื“ืขืกืงื˜ืึธืคึผ ื‘ื™ืœื“. ื“ืขืจ ืกืขืจื•ื•ืขืจ ืกื™ืกื˜ืขื ื”ืื˜ ืึท ืงืจืึทืคื˜ื™ืง ื™ื ืกื˜ืึทืœืœืขืจ, ื•ื•ืึธืก ื•ื•ื™ื™ึทื–ืŸ ื™ื‘ืขืจื™ืง ื–ืขืœื‘ืกื˜ืฉื˜ืขื ื“ื™ืงื™ื™ึทื˜ ื•ื•ืึธืก ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืคืึทืจืงืจื™ืคึผืœื˜ ื“ื•ืจืš ืฉืึทื•ื•ื™ื ื’ ื“ื™ UEFI ืกื™ืกื˜ืขื ืฆืขื˜ื™ื™ืœื•ื ื’ ืื•ื™ืฃ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื“ื™ืกืงืก, ืื•ืŸ ืกืคึผื•ื™ืœื™ื ื’ ืึทืœืข ื“ื™ ืฉื™ื™ื ืงื™ื™ื˜. ืึทืงืงืึธืจื“ื™ื ื’ืœื™, ืขืก ืื™ื– ืื™ื ืกื˜ืึทืœื™ืจืŸ ื‘ืœื•ื™ื– ืื™ืŸ UEFI ืžืึธื“ืข. ืขืก ืึธืคืคืขืจืก ืงื™ื™ืŸ ืึธืคึผืฆื™ืขืก.

ืžื™ืจ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืฆื•ืคืจื™ื“ืŸ ืžื™ื˜ ื“ืขื.

ื•ื•ืึธืก?ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, UEFI ืฉื˜ื™ื•ื•ืœ ืื™ื– ื’ืึธืจ ืฉื•ื•ืึทืš ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืžื™ื˜ ืฉื˜ื™ื•ื•ืœ ื•ื•ื™ื™ื›ื•ื•ืืจื’ RAID, ื•ื•ื™ื™ึทืœ ... ืงื™ื™ื ืขืจ ืึธืคืคืขืจืก ืื•ื ื“ื– ืจืขื–ืขืจื•ื•ื™ื™ืฉืึทื ื– ืคึฟืึทืจ ื“ื™ UEFI ESP ืฆืขื˜ื™ื™ืœื•ื ื’. ืขืก ื–ืขื ืขืŸ ืึธื ืœื™ื™ืŸ ืจืขืกืึทืคึผื™ื– ื•ื•ืึธืก ืคึฟืึธืจืฉืœืึธื’ืŸ ืคึผืœื™ื™ืกื™ื ื’ ื“ื™ ESP ืฆืขื˜ื™ื™ืœื•ื ื’ ืื•ื™ืฃ ืึท ื‘ืœื™ืฅ ืคืึธืจ ืื™ืŸ ืึท ื•ืกื‘ ืคึผืึธืจื˜, ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ืึท ืคื•ื ื˜ ืคื•ืŸ ื“ื•ืจื›ืคืึทืœ. ืขืก ื–ืขื ืขืŸ ืจืขืกืึทืคึผื™ื– ื ื™ืฆืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ mdadm RAID 1 ืžื™ื˜ ืžืขื˜ืึทื“ืึทื˜ืึท ื•ื•ืขืจืกื™ืข 0.9 ื•ื•ืึธืก ื˜ืึธืŸ ื ื™ื˜ ืคืึทืจืžื™ื™ึทื“ืŸ ื“ื™ UEFI BIOS ืฆื• ื–ืขืŸ ื“ืขื ืฆืขื˜ื™ื™ืœื•ื ื’, ืึธื‘ืขืจ ื“ืึธืก ืœืขื‘ืŸ ื‘ื™ื– ื“ื™ ื’ืœื™ืงืœืขืš ืžืึธืžืขื ื˜ ื•ื•ืขืŸ ื“ื™ ื‘ื™ื™ืึธื•ืก ืึธื“ืขืจ ืืŸ ืื ื“ืขืจ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืึทืก ืฉืจื™ื™ื‘ื˜ ืขืคึผืขืก ืฆื• ื“ื™ ESP ืื•ืŸ ืคืืจื’ืขืกืŸ ืฆื• ืกื™ื ื’ืงืจืึทื ื™ื™ื– ืขืก ืฆื• ืื ื“ืขืจืข. ืžื™ืจืขืจื–.

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, UEFI ืฉื˜ื™ื•ื•ืœ ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ NVRAM, ื•ื•ืึธืก ื•ื•ืขื˜ ื ื™ืฉื˜ ืžืึทืš ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื“ื™ ื“ื™ืกืงืก ืฆื• ื“ื™ ื ื™ื™ึทืข ืกื™ืกื˜ืขื, ื•ื•ื™ื™ึทืœ ืื™ื– ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืžืึธื˜ื”ืขืจื‘ืึธืึทืจื“.

ืึทื–ื•ื™, ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืจื™ื™ื ื•ื•ืขื ื˜ ืึท ื ื™ื™ึท ืจืึธื“. ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืึท ื’ืจื™ื™ื˜-ื’ืขืžืื›ื˜, ืฆื™ื™ื˜-ื˜ืขืกื˜ืขื“ ื–ื™ื™ื“ืข ืก ื‘ื™ื™ืง, ืื™ืฆื˜ ื’ืขืจื•ืคึฟืŸ ืœืขื’ืึทืกื™ / ื‘ื™ืึธืก ืฉื˜ื™ื•ื•ืœ, ืžื™ื˜ ื“ื™ ืฉื˜ืึธืœืฅ ื ืึธืžืขืŸ ืคื•ืŸ CSM ืื•ื™ืฃ UEFI-ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืกื™ืกื˜ืขืžืขืŸ. ืžื™ืจ ื•ื•ืขืœืŸ ืขืก ื ืึธืจ ื ืขืžืขืŸ ืึทื•ื•ืขืง ื“ื™ ืคึผืึธืœื™ืฆืข, ืฉืžื™ืจืŸ ืขืก, ืคึผืึธืžืคึผืข ืึทืจื•ื™ืฃ ื“ื™ ื˜ื™ืจืขืก ืื•ืŸ ื•ื•ื™ืฉืŸ ืขืก ืžื™ื˜ ืึท ืคื™ื™ึทื›ื˜ ืฉื˜ืึธืฃ.

ื“ื™ ื“ืขืกืงื˜ืึทืคึผ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื•ื‘ื•ื ื˜ื• ืงืขื ืขืŸ ืื•ื™ืš ื ื™ื˜ ื–ื™ื™ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืจืขื›ื˜ ืžื™ื˜ ื“ื™ ืœืขื’ืึทืกื™ ื‘ืึธืึธื˜ืœืึธืึทื“ืขืจ, ืึธื‘ืขืจ ื“ืึธ, ื•ื•ื™ ื–ื™ื™ ื–ืึธื’ืŸ, ืื™ืŸ ืžื™ื ื“ืกื˜ืขืจ ืขืก ื–ืขื ืขืŸ ืึธืคึผืฆื™ืขืก.

ืื•ืŸ ืึทื–ื•ื™, ืžื™ืจ ืงืœื™ื™ึทื‘ืŸ ื“ื™ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืื•ืŸ ืœืึธื“ืŸ ื“ื™ ืกื™ืกื˜ืขื ืคึฟื•ืŸ ื“ื™ Ubuntu Live ื‘ืึธืึธื˜ืึทื‘ืœืข ื‘ืœื™ืฅ ืคืึธืจ. ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธืคึผืœืึธื“ื™ืจืŸ ืคึผืึทืงืึทื“ื–ืฉืึทื–, ืึทื–ื•ื™ ืžื™ืจ ืฉื˜ืขืœืŸ ื“ื™ ื ืขืฅ ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืคึฟืึทืจ ืื™ืจ. ืื•ื™ื‘ ืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ, ืื™ืจ ืงืขื ืขืŸ ืœืึธื“ืŸ ื“ื™ ื ื™ื™ื˜ื™ืง ืคึผืึทืงืึทื“ื–ืฉืึทื– ืื•ื™ืฃ ืึท ื‘ืœื™ืฅ ืคืึธืจ ืื™ืŸ ืฉื˜ื™ื™ึทื’ืŸ.

ืžื™ืจ ื’ื™ื™ืŸ ืื™ืŸ ื“ื™ ื“ืขืกืงื˜ืึธืคึผ ืกื•ื•ื™ื•ื•ืข, ืงืึทื˜ืขืจ ื“ื™ ื•ื•ืึธืงื–ืึทืœ ืขืžื•ืœืึทื˜ืึธืจ, ืื•ืŸ ืžื™ืจ ื’ื™ื™ืŸ:

#sudo bash

ื•ื•ื™โ€ฆ?ื“ื™ ืฉื•ืจื” ืื•ื™ื‘ืŸ ืื™ื– ื“ื™ ืงืึทื ืึทื ืึทืงืึทืœ ืฆื™ื ื’ืœ ืคึฟืึทืจ ื”ืึธืœื™ื•ื•ืึทืจืก ื•ื•ืขื’ืŸ ืกื•ื“ืึธ. ื’ ื‘ะพื’ืจืขืกืขืจืข ืึทืคึผืขืจื˜ื•ื ืึทื˜ื™ื– ืงื•ืžืขืŸ ืื•ืŸะพื’ืจืขืกืขืจืข ืคึฟืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขื›ืงื™ื™ื˜. ื“ื™ ืงืฉื™ื ืื™ื– ืฆื™ ืื™ืจ ืงืขื ืขืŸ ื ืขืžืขืŸ ืขืก ืื•ื™ืฃ ื–ื™ืš. ืคื™ืœืข ืžืขื ื˜ืฉืŸ ื˜ืจืึทื›ื˜ืŸ ืึทื– ื ื™ืฆืŸ ืกื•ื“ืึธ ืื™ืŸ ื“ืขื ื•ื•ืขื’ ืื™ื– ืœืคึผื—ื•ืช ื ื™ื˜ ืึธืคึผื’ืขื”ื™ื˜. ืึธื‘ืขืจ:

#apt-get install mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc

ืคืืจื•ื•ืืก ื ื™ืฉื˜ ZFS...?ื•ื•ืขืŸ ืžื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ืงืึธืžืคึผื™ื•ื˜ืขืจ, ืžื™ืจ ื™ืกืขื ืฉืึทืœื™ ืœื™ื™ึทืขืŸ ืื•ื ื“ื–ืขืจ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืฆื• ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืคื•ืŸ ื“ืขื ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืฆื• ืคืึธืจ.
ื•ื•ืขืŸ ืžื™ืจ ืฆื•ื˜ืจื•ื™ ื“ืขื ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืžื™ื˜ ื“ื™ ื–ื™ื›ืขืจืงื™ื™ึทื˜ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื“ืึทื˜ืŸ, ืžื™ืจ ื ืขืžืขืŸ ืึท ืึทื ื˜ืœื™ื™ึทืขืŸ ื’ืœื™ื™ึทืš ืฆื• ื“ื™ ืคึผืจื™ื™ึทื– ืคื•ืŸ ืจื™ืกื˜ืึธืจื™ื ื’ ื“ื™ ื“ืึทื˜ืŸ, ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื”ืึธื‘ืŸ ืฆื• ื‘ืึทืฆืึธืœืŸ ืึทื•ื•ืขืง ืึทืžืึธืœ.

ืคึฟื•ืŸ ื“ืขื ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’, ZFS ืื™ื– ืึท ืคืขืจืจืึทืจื™, ืื•ืŸ ืžื“ื“ื+ืœื•ื ืื™ื– ืžืขืจ ื•ื•ื™ ืึท ื•ื•ืขืœืึธืกื™ืคึผืขื“.

ืกืึทื‘ื“ื–ืฉืขืงื˜ื™ื•ื•ืœื™, ื“ืขืจ ืžื—ื‘ืจ ืคึผืจืึทืคืขืจื– ืฆื• ืึทื ื˜ืœื™ื™ึทืขืŸ ืึท ื‘ื™ื™ืง ืื•ื™ืฃ ืงืจืขื“ื™ื˜ ืฆื• ืื•ืžื‘ืึทืงืึทื ื˜ ืžืขื ื˜ืฉืŸ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืึท Ferrari. ื“ืึธืจื˜, ื“ื™ ืคึผืจื™ื™ึทื– ืคื•ืŸ ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื™ื– ื ื™ืฉื˜ ื”ื•ื™ืš. ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืคึฟืึทืจ ืจืขื›ื˜. ืกื™ืžืคึผืœืขืจ ื•ื•ื™ ืคืึทืจืงืขืจ ื›ึผืœืœื™ื. ืคึผืึทืจืงื™ื ื’ ืื™ื– ืคืจื™ื™. ืงืจื™ื™ึทื–-ืœืึทื ื“ ืคื™ื™ื™ืงื™ื™ื˜ ืื™ื– ื‘ืขืกืขืจ. ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขื ื“ื™ืง ืฆื•ื˜ืฉืขืคึผืขืŸ ืคื™ืก ืฆื• ืึท ื•ื•ืขืœืึธืกื™ืคึผืขื“, ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ืคืึทืจืจื™ื›ื˜ืŸ ืึท ื•ื•ืขืœืึธืกื™ืคึผืขื“ ืžื™ื˜ ื“ื™ื™ืŸ ืื™ื™ื’ืŸ ื”ืขื ื˜.

ืคืืจื•ื•ืืก ื“ืขืŸ BTRFS...?ืื™ืŸ ืกื“ืจ ืฆื• ืฉื˜ื™ื•ื•ืœ ื“ื™ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืึท ื˜ืขืงืข ืกื™ืกื˜ืขื ื•ื•ืึธืก ืื™ื– ื’ืขืฉื˜ื™ืฆื˜ ืื™ืŸ Legacy / BIOS GRUB ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ, ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜ ืฉื˜ื™ืฆื˜ ืœืขื‘ืŸ ืกื ืึทืคึผืฉืึทืฅ. ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ืขืก ืคึฟืึทืจ ื“ื™ /boot ืฆืขื˜ื™ื™ืœื•ื ื’. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ื“ืขืจ ืžื—ื‘ืจ ืคึผืจืึทืคืขืจื– ืฆื• ื ื•ืฆืŸ ื“ืขื FS ืคึฟืึทืจ / (ื•ื•ืึธืจืฆืœ), ื ื™ื˜ ืคืึทืจื’ืขืกืŸ ืฆื• ื˜ืึธืŸ ืึทื– ืคึฟืึทืจ ืงื™ื™ืŸ ืื ื“ืขืจืข ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืื™ืจ ืงืขื ืขืŸ ืžืึทื›ืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืคึผืึทืจื˜ื™ืฉืึทื ื– ืื•ื™ืฃ LVM ืื•ืŸ ืึธื ืงืœืึทืคึผืŸ ื–ื™ื™ ืื™ืŸ ื“ื™ ื ื™ื™ื˜ื™ืง ื“ื™ื™ืจืขืงื˜ืขืจื™ื–.

ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืงืจืึธื ืงื™ื™ืŸ ื‘ื™ืœื“ืขืจ ืคื•ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ืึธื“ืขืจ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืื•ื™ืฃ ื“ืขื FS.
ื“ืขืจ FS ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื‘ืœื•ื™ื– ืฆื• ืฉืึทืคึฟืŸ ืกื ืึทืคึผืฉืึทืฅ ืคื•ืŸ ื“ื™ ืกื™ืกื˜ืขื ืึธืŸ ืงืขืจืŸ ืขืก ืึทื•ื•ืขืง ืื•ืŸ ื“ืขืจื ืึธืš ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ืกื ืึทืคึผืฉืึทืฅ ืฆื• ืึท ื‘ืึทืงืึทืคึผ ื“ื™ืกืง ืžื™ื˜ ืฉื™ืงืŸ / ื‘ืึทืงื•ืžืขืŸ.

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ื“ืขืจ ืžื—ื‘ืจ ื‘ื›ืœืœ ืคึผืจืึทืคืขืจื– ืฆื• ื”ืึทืœื˜ืŸ ืึท ืžื™ื ื™ืžื•ื ืคื•ืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื’ืœื™ื™ึทืš ืื•ื™ืฃ ื“ื™ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืื•ืŸ ืœื•ื™ืคืŸ ืึทืœืข ื“ื™ ืื ื“ืขืจืข ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืื™ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ื ื™ืฆืŸ ื˜ื™ื ื’ื– ื•ื•ื™ ืคืึธืจื•ื•ืขืจื“ื™ื ื’ ื’ืคึผื•ืก ืื•ืŸ ืคึผืกื™-ื•ืกื‘ ื”ืึธืกื˜ ืงืึทื ื˜ืจืึธื•ืœืขืจื– ืฆื• KVM ื“ื•ืจืš IOMMU.

ื“ื™ ื‘ืœื•ื™ื– ื–ืื›ืŸ ืœื™ื ืงืก ืื•ื™ืฃ ื“ื™ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ื–ืขื ืขืŸ ื“ืึทื˜ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ, ื•ื•ื™ืจื˜ื•ืึทืœื™ื–ืึทื˜ื™ืึธืŸ ืื•ืŸ ื‘ืึทืงืึทืคึผ.

ืื•ื™ื‘ ืื™ืจ ืฆื•ื˜ืจื•ื™ ZFS ืžืขืจ, ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ, ื–ื™ื™ ื–ืขื ืขืŸ ื™ื ื˜ืขืจื˜ืฉื™ื™ื ื“ื–ืฉืึทื‘ืึทืœ ืคึฟืึทืจ ื“ื™ ืกืคึผืขืกื™ืคื™ืขื“ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ืึธื‘ืขืจ, ื“ืขืจ ืžื—ื‘ืจ ื“ื™ืœื™ื‘ืจืึทื˜ืœื™ ื™ื’ื ืึธืจื– ื“ื™ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืžื™ืจืขืจื™ื ื’ / RAID ืื•ืŸ ื™ื‘ืขืจื™ืงื™ื™ึทื˜ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื•ื•ืึธืก ZFS, BRTFS ืื•ืŸ LVM ื”ืึธื‘ืŸ.

ื•ื•ื™ ืึทืŸ ื ืึธืš ืึทืจื’ื•ืžืขื ื˜, BTRFS ื”ืื˜ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื•ื•ืขื ื“ืŸ ื˜ืจืึทืค - ืฉืจื™ื™ื‘ื˜ ืื™ืŸ ืกืึทืงื•ื•ืขื ื˜ืฉืึทืœ ืึธื ืขืก, ื•ื•ืึธืก ื”ืื˜ ืึท ื’ืึธืจ positive ื•ื•ื™ืจืงื•ื ื’ ืื•ื™ืฃ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ืกื ืึทืคึผืฉืึทืฅ / ื‘ืึทืงืึทืคึผืก ืื•ื™ืฃ ื“ื™ ื”ื“ื“.

ืœืึธืžื™ืจ ื™ื‘ืขืจืงื•ืงืŸ ืึทืœืข ื“ืขื•ื•ื™ืกืขืก:

#udevadm control --reload-rules && udevadm trigger

ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืึทืจื•ื:

#lsscsi && nvme list
[0:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sda
[1:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdb
[2:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdc
[3:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdd
[4:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sde
[5:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdf
[6:0:0:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdg
[6:0:1:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdh
[6:0:2:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdi
[6:0:3:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdj
[6:0:4:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdk
[6:0:5:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdl
[6:0:6:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdm
[6:0:7:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdn
Node SN Model Namespace Usage Format FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1 S466NXXXXXXX15L Samsung SSD 970 EVO 500GB 1 0,00 GB / 500,11 GB 512 B + 0 B 2B2QEXE7
/dev/nvme1n1 S5H7NXXXXXXX48N Samsung SSD 970 EVO 500GB 1 0,00 GB / 500,11 GB 512 B + 0 B 2B2QEXE7

ื“ื™ืกืง ืื•ื™ืกืœื™ื™ื’

NVMe SSD

ืึธื‘ืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืฆื™ื™ื›ืŸ ื–ื™ื™ ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืขื’. ืึทืœืข ื“ื™ ื–ืขืœื‘ืข, ืื•ื ื“ื–ืขืจ ื‘ื™ื™ืึธื•ืก ืงืขืŸ ื ื™ืฉื˜ ื–ืขืŸ ื“ื™ ื“ืจื™ื™ื•ื•ื–. ืึทื–ื•ื™, ื–ื™ื™ ื•ื•ืขืœืŸ ื’ื™ื™ืŸ ืœืขื’ืึทืžืจืข ืฆื• ื•ื•ื™ื™ื›ื•ื•ืืจื’ RAID. ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืืคื™ืœื• ืžืึทื›ืŸ ืกืขืงืฉืึทื ื– ื“ืึธืจื˜. ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื ืึธื›ืคืึธืœื’ืŸ ื“ื™ "ืงืึทื ืึธืŸ" ืึธื“ืขืจ "ืคึผืจื™ื ืกื™ืงืœื™", ืฉืึทืคึฟืŸ ืื™ื™ืŸ ื’ืจื•ื™ืก ืฆืขื˜ื™ื™ืœื•ื ื’, ื•ื•ื™ ืึท ื”ื“ื“.

SATA HDD

ืขืก ืื™ื– ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืื•ื™ืกื˜ืจืึทื›ื˜ืŸ ืขืคึผืขืก ืกืคึผืขืฆื™ืขืœ ื“ืึธ. ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทื›ืŸ ืื™ื™ืŸ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืคึฟืึทืจ ืึทืœืฅ. ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทื›ืŸ ืึท ืฆืขื˜ื™ื™ืœื•ื ื’ ื•ื•ื™ื™ึทืœ ื“ื™ ื‘ื™ื™ืึธื•ืก ื–ืขื˜ ื“ื™ ื“ื™ืกืงืก ืื•ืŸ ืงืขืŸ ืืคื™ืœื• ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืฉื˜ื™ื•ื•ืœ ืคึฟื•ืŸ ื–ื™ื™. ืžื™ืจ ื•ื•ืขืœืŸ ืืคื™ืœื• ื™ื ืกื˜ืึทืœื™ืจืŸ GRUB ืื•ื™ืฃ ื“ื™ ื“ื™ืกืงืก ืฉืคึผืขื˜ืขืจ ืึทื–ื•ื™ ืึทื– ื“ื™ ืกื™ืกื˜ืขื ืงืขืŸ ืคึผืœื•ืฆืœื™ื ื’ ื˜ืึธืŸ ื“ืึธืก.

#cat >hdd.part << EOF
label: dos
label-id: 0x00000000
device: /dev/sdg
unit: sectors

/dev/sdg1 : start= 2048, size= 1953523120, type=fd, bootable
EOF
#sfdisk /dev/sdg < hdd.part
#sfdisk /dev/sdh < hdd.part
#sfdisk /dev/sdi < hdd.part
#sfdisk /dev/sdj < hdd.part
#sfdisk /dev/sdk < hdd.part
#sfdisk /dev/sdl < hdd.part
#sfdisk /dev/sdm < hdd.part
#sfdisk /dev/sdn < hdd.part

SATA SSD

ื“ืึธืก ืื™ื– ื•ื•ื• ื“ื™ ื–ืื›ืŸ ื•ื•ืขืจืŸ ื˜ืฉื™ืงืึทื•ื•ืข ืคึฟืึทืจ ืื•ื ื“ื–.

ืขืจืฉื˜ืขืจ, ืื•ื ื“ื–ืขืจ ื“ืจื™ื™ื•ื•ื– ื–ืขื ืขืŸ 2 ื˜ื‘ ืื™ืŸ ื’ืจื™ื™ืก. ื“ืึธืก ืื™ื– ืื™ืŸ ื“ื™ ืคึผืึทืกื™ืง ืงื™ื™ื˜ ืคึฟืึทืจ MBR, ื•ื•ืึธืก ืื™ื– ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ. ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ืคึผืœื™ื™ืกื˜ ืžื™ื˜ GPT. ื’ืคึผื˜ ื“ื™ืกืงืก ื”ืึธื‘ืŸ ืึท ืงืึทืžืคึผืึทื˜ืึทื‘ื™ืœืึทื˜ื™ ืฉื™ื›ื˜ืข ื•ื•ืึธืก ืึทืœืึทื•ื– MBR-ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืกื™ืกื˜ืขืžืขืŸ ืฆื• ื–ืขืŸ ื“ื™ ืขืจืฉื˜ืขืจ 4 ืคึผืึทืจื˜ื™ืฉืึทื ื– ืื•ื™ื‘ ื–ื™ื™ ื–ืขื ืขืŸ ืœื™ื’ืŸ ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ 2 ื˜ืขืจืึทื‘ื™ื˜ืขืก. ื“ื™ ื”ื•ื™ืคึผื˜ ื–ืึทืš ืื™ื– ืึทื– ื“ื™ ืฉื˜ื™ื•ื•ืœ ืฆืขื˜ื™ื™ืœื•ื ื’ ืื•ืŸ bios_grub ืฆืขื˜ื™ื™ืœื•ื ื’ ืื•ื™ืฃ ื“ื™ ื“ื™ืกืงืก ื–ืึธืœ ื–ื™ื™ืŸ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘. ื“ืึธืก ืืคื™ืœื• ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉื˜ื™ื•ื•ืœ ืคึฟื•ืŸ GPT Legacy / BIOS ื“ืจื™ื™ื•ื•ื–.

ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืื•ื ื“ื–ืขืจ ืคืึทืœ.

ื“ืึธ ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทื›ืŸ ืฆื•ื•ื™ื™ ืกืขืงืฉืึทื ื–. ื“ืขืจ ืขืจืฉื˜ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ 1 ื’ื™ื’ืื‘ื™ื™ื˜ ืื™ืŸ ื’ืจื™ื™ืก ืื•ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืคึฟืึทืจ RAID 1 / ืฉื˜ื™ื•ื•ืœ.

ื“ืขืจ ืฆื•ื•ื™ื™ื˜ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืคึฟืึทืจ RAID 6 ืื•ืŸ ื•ื•ืขื˜ ื ืขืžืขืŸ ืึทืœืข ื“ื™ ืจื•ืขืŸ ืคืจื™ื™ ืคึผืœืึทืฅ ืึทื—ื•ืฅ ืคึฟืึทืจ ืึท ืงืœื™ื™ืŸ ืึทื ืึทืœืึทืงื™ื™ื˜ื™ื“ ื’ืขื’ื ื˜ ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ื™ ืคืึธืจ.

ื•ื•ืึธืก ืื™ื– ื“ืึธืก ืึทื ืžืึทืจืงื˜ ื’ืขื’ื ื˜?ืœื•ื™ื˜ ืงื•ื•ืืœืŸ ืื•ื™ืฃ ื“ืขืจ ื ืขืฅ, ืื•ื ื“ื–ืขืจ SATA SSDs ื”ืึธื‘ืŸ ืื•ื™ืฃ ื‘ืจืขื˜ ืึท ื“ื™ื ืึทืžื™ืงืึทืœืœื™ ื™ืงืกืคึผืึทื ื“ืึทื‘ืึทืœ SLC ืงืึทืฉ ืจื™ื™ื ื“ื–ืฉื™ื ื’ ืื™ืŸ ื’ืจื™ื™ืก ืคื•ืŸ 6 ืฆื• 78 ื’ื™ื’ืื‘ื™ื™ื˜. ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ 6 ื’ื™ื’ืื‘ื™ื™ื˜ "ืคืจื™ื™" ืจืขื›ื˜ ืฆื• ื“ืขืจ ื—ื™ืœื•ืง ืฆื•ื•ื™ืฉืŸ "ื’ื™ื’ืื‘ื™ื™ื˜" ืื•ืŸ "ื’ื™ื‘ื™ื‘ื™ื™ื˜" ืื™ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึทื˜ ืคื•ืŸ ื“ื™ ืคืึธืจ. ื“ื™ ืจื•ืขืŸ 72 ื’ื™ื’ืื‘ื™ื™ื˜ ื–ืขื ืขืŸ ืึทืœืึทืงื™ื™ื˜ื™ื“ ืคื•ืŸ ืึทื ื™ื•ื–ื“ ืคึผืœืึทืฅ.

ื“ืึธ ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ืื ื’ืขื•ื•ื™ื–ืŸ ืึทื– ืžื™ืจ ื”ืึธื‘ืŸ ืึท SLC ืงืึทืฉ, ืื•ืŸ ื“ื™ ืคึผืœืึทืฅ ืื™ื– ืคืึทืจื ื•ืžืขืŸ ืื™ืŸ 4 ื‘ื™ืกืœ MLC ืžืึธื“ืข. ื•ื•ืึธืก ืคึฟืึทืจ ืื•ื ื“ื– ื™ืคืขืงื˜ื™ื•ื•ืœื™ ืžื™ื˜ืœ ืึทื– ืคึฟืึทืจ ื™ืขื“ืขืจ 4 ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ ืคืจื™ื™ ืคึผืœืึทืฅ ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื‘ืœื•ื™ื– 1 ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ SLC ืงืึทืฉ.

ืžื•ืœื˜ื™ืคึผืœื™ 72 ื’ื™ื’ืื‘ื™ื™ื˜ ื“ื•ืจืš 4 ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ 288 ื’ื™ื’ืื‘ื™ื™ื˜. ื“ืึธืก ืื™ื– ื“ืขืจ ืคืจื™ื™ ืคึผืœืึทืฅ ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืฆื™ื™ื›ืŸ ืื•ื™ืก ืฆื• ืœืึธื–ืŸ ื“ื™ ื“ืจื™ื™ื•ื•ื– ืฆื• ื ื•ืฆืŸ ื“ื™ SLC ืงืึทืฉ ืคื•ืœ.

ืื–ื•ื™, ืžื™ืจ ื•ื•ืขืœืŸ ื™ืคืขืงื˜ื™ื•ื•ืœื™ ื‘ืึทืงื•ืžืขืŸ ืึทืจื•ื™ืฃ ืฆื• 312 ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ SLC ืงืึทืฉ ืคึฟื•ืŸ ืึท ื’ืึทื ืฅ ืคื•ืŸ ื–ืขืงืก ื“ืจื™ื™ื•ื•ื–. ืคื•ืŸ ืึทืœืข ื“ื™ ื“ืจื™ื™ื•ื•ื–, 2 ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื ื™ืฆื˜ ืื™ืŸ RAID ืคึฟืึทืจ ื™ื‘ืขืจื™ืงื™ื™ึทื˜.

ื“ืขืจ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืงืึทืฉ ื•ื•ืขื˜ ืœืึธื–ืŸ ืื•ื ื“ื– ื’ืึธืจ ืจืึทืจืขืœื™ ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืœืขื‘ืŸ ื˜ืจืขืคืŸ ืึท ืกื™ื˜ื•ืึทืฆื™ืข ื•ื•ื• ืึท ืฉืจื™ื™ึทื‘ืŸ ื˜ื•ื˜ ื ื™ืฉื˜ ื’ื™ื™ืŸ ืฆื• ื“ื™ ืงืึทืฉ. ื“ืึธืก ื’ืึธืจ ืงืึทืžืคึผืึทื ืกื™ื™ืฅ ืคึฟืึทืจ ื“ื™ ืกืึทื“ืึทืกื˜ ืฉื˜ืขืจื•ื ื’ ืคื•ืŸ QLC ื–ื›ึผืจื•ืŸ - ื“ื™ ื’ืึธืจ ื ื™ื“ืขืจื™ืง ืฉืจื™ื™ึทื‘ืŸ ื’ื™ื›ืงื™ื™ึทื˜ ื•ื•ืขืŸ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื’ืขืฉืจื™ื‘ืŸ ื‘ื™ื™ืคึผืึทืกื™ื ื’ ื“ื™ ืงืึทืฉ. ืื•ื™ื‘ ื“ื™ื™ืŸ ืœืึธื•ื“ื– ื˜ืึธืŸ ื ื™ื˜ ืฉื˜ื™ืžืขืŸ ืฆื• ื“ืขื, ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืึทื– ืื™ืจ ื˜ืจืึทื›ื˜ืŸ ืฉื•ื•ืขืจ ื•ื•ืขื’ืŸ ื•ื•ื™ ืœืึทื ื’ ื“ื™ื™ืŸ SSD ื•ื•ืขื˜ ืœืขืฆื˜ืข ืื•ื ื˜ืขืจ ืึทื–ืึท ืึท ืžืึทืกืข, ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ื“ื™ TBW ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึทื˜.

#cat >ssd.part << EOF
label: dos
label-id: 0x00000000
device: /dev/sda
unit: sectors

/dev/sda1 : start= 2048, size= 2097152, type=fd, bootable
/dev/sda2 : start= 2099200, size= 3300950016, type=fd
EOF
#sfdisk /dev/sda < ssd.part
#sfdisk /dev/sdb < ssd.part
#sfdisk /dev/sdc < ssd.part
#sfdisk /dev/sdd < ssd.part
#sfdisk /dev/sde < ssd.part
#sfdisk /dev/sdf < ssd.part

ืงืจื™ื™ื™ื˜ื™ื ื’ ืึทืจืจื™ื™ึทืก

ืขืจืฉื˜ืขืจ, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืจืขื ืึทืžืข ื“ื™ ืžืึทืฉื™ืŸ. ื“ืึธืก ืื™ื– ื ื™ื™ื˜ื™ืง ื•ื•ื™ื™ึทืœ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ื ืึธืžืขืŸ ืื™ื– ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืžืขื ื’ืข ื ืึธืžืขืŸ ืขืจื’ืขืฅ ื™ืŸ ืžื“ื“ื ืื•ืŸ ืึทืคืขืงืฅ ืขืคึผืขืก ืขืจื’ืขืฅ. ืคื•ืŸ ืงื•ืจืก, ืขืจื™ื™ื–ืึทื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ื ื™ื™ืžื“ ืฉืคึผืขื˜ืขืจ, ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ืึทืŸ ื•ืžื ื™ื™ื˜ื™ืง ืฉืจื™ื˜.

#mcedit /etc/hostname
#mcedit /etc/hosts
#hostname
vdesk0

NVMe SSD

#mdadm --create --verbose --assume-clean /dev/md0 --level=1 --raid-devices=2 /dev/nvme[0-1]n1

ืคืืจื•ื•ืืก -ืื•ื™ืกื ืขืžืขืŸ-ืจื™ื™ืŸ...?ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ ื™ื ื™ื˜ื™ืึทืœื™ื™ื–ื™ื ื’ ืขืจื™ื™ื–. ืคึฟืึทืจ ื‘ื™ื™ื“ืข RAID ืœืขื•ื•ืขืœืก 1 ืื•ืŸ 6 ื“ืึธืก ืื™ื– ื’ื™ืœื˜ื™ืง. ืึทืœืฅ ืงืขื ืขืŸ ืึทืจื‘ืขื˜ืŸ ืึธืŸ ื™ื ื™ื˜ื™ืึทืœื™ื–ื™ื™ืฉืึทืŸ ืื•ื™ื‘ ืขืก ืื™ื– ืึท ื ื™ื™ึทืข ืžืขื ื’ืข. ื“ืขืจืฆื•, ื™ื ื™ื˜ื™ืึทืœื™ื–ื™ื ื’ ื“ื™ SSD ืžืขื ื’ืข ื‘ื™ื™ ืฉืึทืคื•ื ื’ ืื™ื– ืึท ื•ื•ื™ืกื˜ ืคื•ืŸ TBW ืžื™ื˜ืœ. ืžื™ืจ ื ื•ืฆืŸ TRIM / DISCARD ื•ื•ื™ ืžืขื’ืœืขืš ืื•ื™ืฃ ืึทืกืขืžื‘ืึทืœื“ ืกืกื“ ืขืจื™ื™ื– ืฆื• "ื™ื ื™ืฉื™ืึทืœื™ื–ื™ืจืŸ" ื–ื™ื™.

ืคึฟืึทืจ SSD ืขืจื™ื™ื–, RAID 1 DISCARD ืื™ื– ื’ืขืฉื˜ื™ืฆื˜ ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ.

ืคึฟืึทืจ SSD RAID 6 DISCARD ืขืจื™ื™ื–, ืื™ืจ ืžื•ื–ืŸ ื’ืขื‘ืŸ ืขืก ืื™ืŸ ื“ื™ ืงืขืจืŸ ืžืึธื“ื•ืœืข ืคึผืึทืจืึทืžืขื˜ืขืจืก.

ื“ืึธืก ื–ืึธืœ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ื‘ืœื•ื™ื– ืื•ื™ื‘ ืึทืœืข ืกืกื“ืก ื’ืขื ื™ืฆื˜ ืื™ืŸ ืžื“ืจื’ื” 4/5/6 ืขืจื™ื™ื– ืื™ืŸ ื“ืขื ืกื™ืกื˜ืขื ื”ืึธื‘ืŸ ืืจื‘ืขื˜ืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื“ื™ืกืงืึทืจื“_ื–ืขืจืึธืขืก_ื“ืึทื˜ืึท. ืžืืœ ืื™ืจ ืงื•ืžืขืŸ ืึทืจื™ื‘ืขืจ ืžืึธื“ื ืข ื“ืจื™ื™ื•ื•ื– ื•ื•ืึธืก ื–ืึธื’ืŸ ื“ื™ ืงืขืจืŸ ืึทื– ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืื™ื– ื’ืขืฉื˜ื™ืฆื˜, ืึธื‘ืขืจ ืื™ืŸ ืคืึทืงื˜ ืขืก ืื™ื– ื ื™ืฉื˜ ื“ืึธืจื˜, ืึธื“ืขืจ ื“ื™ ืคึฟื•ื ืงืฆื™ืข ื˜ื•ื˜ ื ื™ืฉื˜ ืฉื˜ืขื ื“ื™ืง ืึทืจื‘ืขื˜. ืื™ืŸ ื“ืขืจ ืžืึธืžืขื ื˜, ืฉื˜ื™ืฆืŸ ืื™ื– ื‘ื ื™ืžืฆื ื›ึผืžืขื˜ ืื•ืžืขื˜ื•ื, ืึธื‘ืขืจ, ืขืก ื–ืขื ืขืŸ ืึทืœื˜ ื“ืจื™ื™ื•ื•ื– ืื•ืŸ ืคื™ืจืžื•ื•ืึทืจืข ืžื™ื˜ ืขืจืจืึธืจืก. ืคึฟืึทืจ ื“ืขื ืกื™ื‘ื”, DISCARD ืฉื˜ื™ืฆืŸ ืื™ื– ืคืึทืจืงืจื™ืคึผืœื˜ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืคึฟืึทืจ RAID 6.

ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ื˜, ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ ื•ื•ืขื˜ ืฆืขืฉื˜ืขืจืŸ ืึทืœืข ื“ืึทื˜ืŸ ืื•ื™ืฃ NVMe ื“ืจื™ื™ื•ื•ื– ื“ื•ืจืš "ื™ื ื™ืฉื™ืึทืœื™ื™ื–ื™ื ื’" ื“ื™ ืžืขื ื’ืข ืžื™ื˜ "ื–ืขืจืึธืก".

#blkdiscard /dev/md0

ืื•ื™ื‘ ืขืคึผืขืก ื’ื™ื™ื˜ ืคืึทืœืฉ, ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืึท ืฉืจื™ื˜.

#blkdiscard --step 65536 /dev/md0

SATA SSD

#mdadm --create --verbose --assume-clean /dev/md1 --level=1 --raid-devices=6 /dev/sd[a-f]1
#blkdiscard /dev/md1
#mdadm --create --verbose --assume-clean /dev/md2 --chunk-size=512 --level=6 --raid-devices=6 /dev/sd[a-f]2

ืคืืจื•ื•ืืก ืึทื–ื•ื™ ื’ืจื•ื™ืก ...?ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ืฉื˜ื™ืง-ื’ืจื™ื™ืก ื”ืื˜ ืึท positive ื•ื•ื™ืจืงื•ื ื’ ืื•ื™ืฃ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ื˜ืจืึทืค - ืœื™ื™ืขื ืขืŸ ืื™ืŸ ื‘ืœืึทืงืก ืึทืจื•ื™ืฃ ืฆื• ืฉื˜ื™ืง-ื’ืจื™ื™ืก ื™ื ืงืœื•ืกื™ื•ื•. ื“ืึธืก ื›ืึทืคึผืึทื ื– ื•ื•ื™ื™ึทืœ ืื™ื™ืŸ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืฆื•ื ืขืžืขืŸ ื’ืจื™ื™ืก ืึธื“ืขืจ ืงืœืขื ืขืจืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืขื ื“ื™ืงื˜ ืœืขื’ืึทืžืจืข ืื•ื™ืฃ ืึท ืื™ื™ืŸ ืžื™ื˜ืœ. ื“ืขืจื™ื‘ืขืจ, ื“ื™ IOPS ืคื•ืŸ ืึทืœืข ื“ืขื•ื•ื™ืกืขืก ืื™ื– ืกืึทืžื“ ืึทืจื•ื™ืฃ. ืœื•ื™ื˜ ืกื˜ืึทื˜ื™ืกื˜ื™ืง, 99% ืคื•ืŸ IO ื˜ื•ื˜ ื ื™ืฉื˜ ื™ืงืกื™ื“ 512K.

RAID 6 IOPS ืคึผืขืจ ืฉืจื™ื™ึทื‘ืŸ ืฉื˜ืขื ื“ื™ืง ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ ืึธื“ืขืจ ื’ืœื™ื™ึทืš ืฆื• ื“ื™ IOPS ืคื•ืŸ ืื™ื™ืŸ ืคืึธืจ. ื•ื•ืขืŸ, ื•ื•ื™ ืึท ื˜ืจืึทืค - ืœื™ื™ืขื ืขืŸ, IOPS ืงืขื ืขืŸ ื–ื™ื™ืŸ ืขื˜ืœืขื›ืข ืžืึธืœ ื’ืจืขืกืขืจ ื•ื•ื™ ืึทื– ืคื•ืŸ ืื™ื™ืŸ ืคืึธืจ, ืื•ืŸ ื“ืึธ ื“ื™ ื‘ืœืึธืง ื’ืจื™ื™ืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง.
ื“ืขืจ ืžื—ื‘ืจ ืงืขืŸ ื ื™ืฉื˜ ื–ืขืŸ ื“ื™ ืคื•ื ื˜ ืื™ืŸ ื˜ืจื™ื™ื ื’ ืฆื• ืึทืคึผื˜ืึทืžื™ื™ื– ืึท ืคึผืึทืจืึทืžืขื˜ืขืจ ื•ื•ืึธืก ืื™ื– ืฉืœืขื›ื˜ ืื™ืŸ RAID 6 ื‘ื™ื™-ื“ื™ื–ื™ื™ืŸ ืื•ืŸ ืึทื ืฉื˜ืึธื˜ ืึธืคึผื˜ื™ืžื™ื–ืขืก ื•ื•ืึธืก RAID 6 ืื™ื– ื’ื•ื˜ ืื™ืŸ.
ืžื™ืจ ื•ื•ืขืœืŸ ืคืึทืจื’ื™ื˜ื™ืงืŸ ืคึฟืึทืจ ื“ื™ ื ืขื‘ืขืš ืจืึทื ื“ืึธื ืฉืจื™ื™ึทื‘ืŸ ืคื•ืŸ RAID 6 ืžื™ื˜ ืึท NVMe ืงืึทืฉ ืื•ืŸ ื“ื™ืŸ ืคึผืจืึทื•ื•ื™ื–ืฉืึทืŸ ื˜ืจื™ืงืก.

ืžื™ืจ ื”ืึธื‘ืŸ ื ืึธืš ื ื™ืฉื˜ ืขื ื™ื™ื‘ืึทืœื“ DISCARD ืคึฟืึทืจ RAID 6. ืึทื–ื•ื™ ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ "ื™ื ื™ืฉื™ืึทืœื™ื–ื™ืจืŸ" ื“ืขื ืžืขื ื’ืข ืคึฟืึทืจ ืื™ืฆื˜. ืžื™ืจ ื•ื•ืขืœืŸ ื˜ืึธืŸ ื“ืึธืก ืฉืคึผืขื˜ืขืจ ื ืึธืš ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ ืึทืก.

SATA HDD

#mdadm --create --verbose --assume-clean /dev/md3 --chunk-size=512 --level=6 --raid-devices=8 /dev/sd[g-n]1

LVM ืื•ื™ืฃ NVMe RAID

ืคึฟืึทืจ ื’ื™ื›ืงื™ื™ึทื˜, ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืฉื˜ืขืœืŸ ื“ื™ ื•ื•ืึธืจืฆืœ ื˜ืขืงืข ืกื™ืกื˜ืขื ืื•ื™ืฃ NVMe RAID 1 ื•ื•ืึธืก ืื™ื– /dev/md0.
ืึธื‘ืขืจ, ืžื™ืจ ื•ื•ืขืœืŸ ื ืึธืš ื“ืึทืจืคึฟืŸ ื“ืขื ืฉื ืขืœ ืžืขื ื’ืข ืคึฟืึทืจ ืื ื“ืขืจืข ื‘ืื“ืขืจืคืขื ื™ืฉืŸ, ืึทื–ืึท ื•ื•ื™ ื•ื™ืกื‘ื™ื™ึทื˜ืŸ, ืžืขื˜ืึทื“ืึทื˜ืึท ืื•ืŸ LVM-cache ืื•ืŸ LVM-ื“ื™ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท, ืึทื–ื•ื™ ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทื›ืŸ ืึท LVM VG ืื•ื™ืฃ ื“ืขื ืžืขื ื’ืข.

#pvcreate /dev/md0
#vgcreate root /dev/md0

ื–ืืœ ืก ืžืึทื›ืŸ ืึท ืฆืขื˜ื™ื™ืœื•ื ื’ ืคึฟืึทืจ ื“ื™ ื•ื•ืึธืจืฆืœ ื˜ืขืงืข ืกื™ืกื˜ืขื.

#lvcreate -L 128G --name root root

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท ืฆืขื˜ื™ื™ืœื•ื ื’ ืคึฟืึทืจ ืกื•ื•ืึทืคึผื™ื ื’ ืœื•ื™ื˜ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ืขื ื‘ืึทืจืึทืŸ.

#lvcreate -L 32G --name swap root

ืึทืก ื™ื ืกื˜ืึทืœื™ืจื•ื ื’

ืื™ืŸ ื’ืึทื ืฅ, ืžื™ืจ ื”ืึธื‘ืŸ ืึทืœืฅ ื ื™ื™ื˜ื™ืง ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืกื™ืกื˜ืขื.

ืงืึทื˜ืขืจ ื“ื™ ืกื™ืกื˜ืขื ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืžืึทื–ืขืง ืคึฟื•ืŸ ื“ื™ Ubuntu Live ืกื•ื•ื™ื•ื•ืข. ื ืึธืจืžืึทืœ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’. ื‘ืœื•ื™ื– ืื™ืŸ ื“ืขืจ ื‘ื™ื ืข ืคื•ืŸ โ€‹โ€‹ืกืึทืœืขืงื˜ื™ื ื’ ื“ื™ืกืงืก ืคึฟืึทืจ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืคืืœื’ืขื ื“ืข:

  • /dev/md1, - mount point /boot, FS - BTRFS
  • /dev/root/root (aka /dev/mapper/root-root), - ื‘ืืจื’ ืคื•ื ื˜ / (ื•ื•ืึธืจืฆืœ), FS - BTRFS
  • /dev/root/swap (aka /dev/mapper/root-swap), - ื ื•ืฆืŸ ื•ื•ื™ ื•ื™ืกื‘ื™ื™ึทื˜ืŸ ืฆืขื˜ื™ื™ืœื•ื ื’
  • ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ื‘ืึธืึธื˜ืœืึธืึทื“ืขืจ ืื•ื™ืฃ /dev/sda

ื•ื•ืขืŸ ืื™ืจ ืกืขืœืขืงื˜ื™ืจืŸ BTRFS ื•ื•ื™ ื“ืขืจ ื•ื•ืึธืจืฆืœ ื˜ืขืงืข ืกื™ืกื˜ืขื, ื“ื™ ื™ื ืกื˜ืึทืœืœืขืจ ื•ื•ืขื˜ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืฉืึทืคึฟืŸ ืฆื•ื•ื™ื™ BTRFS ื•ื•ืึทืœื™ื•ืžื– ืžื™ื˜ ื“ื™ ื ืึธืžืขืŸ "@" ืคึฟืึทืจ / (ื•ื•ืึธืจืฆืœ), ืื•ืŸ "@home" ืคึฟืึทืจ / ื”ื™ื™ื.

ื–ืืœ ืก ืึธื ื”ื™ื™ื‘ืŸ ื“ื™ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ...

ื“ื™ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ื•ื•ืขื˜ ืกื•ืฃ ืžื™ื˜ ืึท ืžืึธื“ืึทืœ ื“ื™ืึทืœืึธื’ ืงืขืกื˜ืœ ื•ื•ืึธืก ื™ื ื“ื™ืงื™ื™ืฅ ืึท ื˜ืขื•ืช ืื™ืŸ ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ ื‘ืึธืึธื˜ืœืึธืึทื“ืขืจ. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ืื™ืจ ื•ื•ืขื˜ ื ื™ืฉื˜ ืงืขื ืขืŸ ืฆื• ืึทืจื•ื™ืกื’ืึทื ื’ ื“ืขื ื“ื™ืึทืœืึธื’ ืžื™ื˜ ื ืึธืจืžืึทืœ ืžื™ื˜ืœ ืื•ืŸ ืคืึธืจื–ืขืฆืŸ ื“ื™ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’. ืžื™ืจ ืงืœืึธืฅ ืื•ื™ืก ืคื•ืŸ ื“ื™ ืกื™ืกื˜ืขื ืื•ืŸ ืงืœืึธืฅ ืื™ืŸ ื•ื•ื™ื“ืขืจ, ืขื ื“ื™ืงืŸ ืื™ืŸ ืึท ืจื™ื™ืŸ Ubuntu Live ื“ืขืกืงื˜ืึทืคึผ. ืขืคึฟืขื ืขืŸ ื“ืขื ื•ื•ืึธืงื–ืึทืœ ืื•ืŸ ื•ื•ื™ื“ืขืจ:

#sudo bash

ืฉืึทืคึฟืŸ ืึท ื˜ืฉืจืึธืึธื˜ ืกื•ื•ื™ื•ื•ืข ืฆื• ืคืึธืจื–ืขืฆืŸ ื“ื™ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’:

#mkdir /mnt/chroot
#mount -o defaults,space_cache,noatime,nodiratime,discard,subvol=@ /dev/mapper/root-root /mnt/chroot
#mount -o defaults,space_cache,noatime,nodiratime,discard,subvol=@home /dev/mapper/root-root /mnt/chroot/home
#mount -o defaults,space_cache,noatime,nodiratime,discard /dev/md1 /mnt/chroot/boot
#mount --bind /proc /mnt/chroot/proc
#mount --bind /sys /mnt/chroot/sys
#mount --bind /dev /mnt/chroot/dev

ืœืึธืžื™ืจ ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ื ืขืฅ ืื•ืŸ ื”ืึธืกื˜ื ืึทืžืข ืื™ืŸ chroot:

#cat /etc/hostname >/mnt/chroot/etc/hostname
#cat /etc/hosts >/mnt/chroot/etc/hosts
#cat /etc/resolv.conf >/mnt/chroot/etc/resolv.conf

ืœืึธืžื™ืจ ื’ื™ื™ืŸ ืื™ืŸ ื“ื™ ื˜ืฉืจืึธืึธื˜ ืกื•ื•ื™ื•ื•ืข:

#chroot /mnt/chroot

ืขืจืฉื˜ืขืจ ืคื•ืŸ ืึทืœืข, ืžื™ืจ ืฆื•ืฉื˜ืขืœืŸ ื“ื™ ืคึผืึทืงืึทื“ื–ืฉืึทื–:

apt-get install --reinstall mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc debsums hdparm

ืœืึธืžื™ืจ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืื•ืŸ ืคืึทืจืจื™ื›ื˜ืŸ ืึทืœืข ืคึผืึทืงืึทื“ื–ืฉืึทื– ื•ื•ืึธืก ื–ืขื ืขืŸ ืงืจื•ื ืื™ื ืกื˜ืึทืœื™ืจืŸ ืจืขื›ื˜ ืฆื• ื“ืขืจืขื ื“ื™ืงื˜ ืกื™ืกื˜ืขื ื™ื ืกื˜ืึทืœื™ืจื•ื ื’:

#CORRUPTED_PACKAGES=$(debsums -s 2>&1 | awk '{print $6}' | uniq)
#apt-get install --reinstall $CORRUPTED_PACKAGES

ืื•ื™ื‘ ืขืคึผืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ, ืื™ืจ ืงืขืŸ ื“ืึทืจืคึฟืŸ ืฆื• ืจืขื“ืึทื’ื™ืจืŸ /etc/apt/sources.list ืขืจืฉื˜ืขืจ

ืœืึธืžื™ืจ ืกื˜ืจื•ื™ืขืจืŸ ื“ื™ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืคึฟืึทืจ ื“ื™ RAID 6 ืžืึธื“ื•ืœืข ืฆื• ื’ืขื‘ืŸ TRIM / DISCARD:

#cat >/etc/modprobe.d/raid456.conf << EOF
options raid456 devices_handle_discard_safely=1
EOF

ื–ืืœ ืก ื˜ื•ื•ื™ืง ืื•ื ื“ื–ืขืจ ืขืจื™ื™ื– ืึท ื‘ื™ืกืœ:

#cat >/etc/udev/rules.d/60-md.rules << EOF
SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/stripe_cache_size", ATTR{md/stripe_cache_size}="32768"
SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/sync_speed_min", ATTR{md/sync_speed_min}="48000"
SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/sync_speed_max", ATTR{md/sync_speed_max}="300000"
EOF
#cat >/etc/udev/rules.d/62-hdparm.rules << EOF
SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/sbin/hdparm -B 254 /dev/%k"
EOF
#cat >/etc/udev/rules.d/63-blockdev.rules << EOF
SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/sbin/blockdev --setra 1024 /dev/%k"
SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="md*", RUN+="/sbin/blockdev --setra 0 /dev/%k"
EOF

ื•ื•ืืก ืื™ื– ืขืก ื’ืขื•ื•ืขืŸ..?ืžื™ืจ ื”ืึธื‘ืŸ ื‘ืืฉืืคืŸ ืึท ืกื›ื•ื ืคื•ืŸ ื•ื“ืขื•ื• ื›ึผืœืœื™ื ื•ื•ืึธืก ื•ื•ืขื˜ ื˜ืึธืŸ ื“ื™ ืคืืœื’ืขื ื“ืข:

  • ืฉื˜ืขืœืŸ ื“ื™ ื‘ืœืึธืง ืงืึทืฉ ื’ืจื™ื™ืก ืคึฟืึทืจ RAID 2020 ืฆื• ื–ื™ื™ืŸ ื˜ื•ื™ื’ืŸ ืคึฟืึทืจ 6. ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื•ื•ืขืจื˜, ืขืก ืžื™ื™ื ื˜, ื”ืื˜ ื ื™ืฉื˜ ืคืืจืขื ื“ืขืจื˜ ื–ื™ื ื˜ ื“ื™ ืฉืึทืคื•ื ื’ ืคื•ืŸ ืœื™ื ื•ืงืก, ืื•ืŸ ืื™ื– ื ื™ืฉื˜ ื˜ื•ื™ื’ืŸ ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜.
  • ืจืขื–ืขืจื•ื•ื™ืจืŸ ืึท ืžื™ื ื™ืžื•ื ืคื•ืŸ IO ืคึฟืึทืจ ื“ื™ ื’ืขื“ื•ื™ืขืจ ืคื•ืŸ ืžืขื ื’ืข ื˜ืฉืขืงืก / ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทื ื–. ื“ืึธืก ืื™ื– ืฆื• ืคืึทืจืžื™ื™ึทื“ืŸ ื“ื™ื™ืŸ ืขืจื™ื™ื– ืคื•ืŸ ืกื˜ืึทืง ืื™ืŸ ืึท ืฉื˜ืึทื˜ ืคื•ืŸ ืื™ื™ื‘ื™ืง ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืื•ื ื˜ืขืจ ืžืึทืกืข.
  • ื‘ืึทื’ืจืขื ืขืฆืŸ ื“ื™ ืžืึทืงืกื™ืžื•ื IO ื‘ืขืฉืึทืก ื˜ืฉืขืงืก / ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ืขืจื™ื™ื–. ื“ืึธืก ืื™ื– ื ื™ื™ื˜ื™ืง ืึทื–ื•ื™ ืึทื– ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ / ืงืึธื ื˜ืจืึธืœื™ืจื•ื ื’ SSD RAIDs ื•ื•ืขื˜ ื ื™ืฉื˜ ืคึผืจืขื’ืœืขืŸ ื“ื™ื™ืŸ ื“ืจื™ื™ื•ื•ื– ืฆื• ืึท ืงืจื•ื›ืœืข. ื“ืึธืก ืื™ื– ืกืคึผืขืฆื™ืขืœ ืืžืช ืคึฟืึทืจ NVMe. (ื’ืขื“ืขื ืง ื˜ ื–ื™ ืš ืฐืขื’ ืŸ ื“ืข ืจ ืงืืœืื“ื™ืข ? ืื™ ืš ื”ื ื‘ ื ื™ืฉ ื˜ ื’ืขืžืฒื ื˜ .)
  • ืคืึทืจื•ื•ืขืจืŸ ื“ื™ืกืงืก ืคื•ืŸ ืกื˜ืึธืคึผืคึผื™ื ื’ ืฉืคึผื™ื ื“ืœ ืจืึธื•ื˜ื™ื™ืฉืึทืŸ (ื”ื“ื“) ื“ื•ืจืš APM ืื•ืŸ ืฉื˜ืขืœืŸ ื“ื™ ืฉืœืึธืคืŸ ื˜ื™ื™ืžืึทื•ื˜ ืคึฟืึทืจ ื“ื™ืกืง ืงืึทื ื˜ืจืึธื•ืœืขืจื– ืฆื• 7 ืฉืขื”. ืื™ืจ ืงืขื ืขืŸ ื’ืึธืจ ื“ื™ืกื™ื™ื‘ืึทืœ APM ืื•ื™ื‘ ื“ื™ื™ืŸ ื“ืจื™ื™ื•ื•ื– ืงืขื ืขืŸ ื˜ืึธืŸ ื“ืึธืก (-B 255). ืžื™ื˜ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื•ื•ืขืจื˜, ื“ื™ ื“ืจื™ื™ื•ื•ื– ื•ื•ืขื˜ ื”ืึทืœื˜ืŸ ื ืึธืš ืคื™ื ืฃ ืกืขืงื•ื ื“ืขืก. ื“ืขืจื ืึธืš ื“ื™ ืึทืก ื•ื•ื™ืœ ืฆื• ื‘ืึทืฉื˜ืขื˜ื™ืง ื“ื™ ื“ื™ืกืง ืงืึทืฉ, ื“ื™ ื“ื™ืกืงืก ื•ื•ืขื˜ ื•ืžื“ืจื™ื™ ืึทืจื•ื™ืฃ ื•ื•ื™ื“ืขืจ, ืื•ืŸ ืึทืœืฅ ื•ื•ืขื˜ ืึธื ื”ื™ื™ื‘ืŸ ื•ื•ื™ื“ืขืจ. ื“ื™ืกืงืก ื”ืึธื‘ืŸ ืึท ืœื™ืžื™ื˜ืขื“ ืžืึทืงืกื™ืžื•ื ื ื•ืžืขืจ ืคื•ืŸ ืฉืคึผื™ื ื“ืœ ืจืึธื•ื˜ื™ื™ืฉืึทื ื–. ืึทื–ืึท ืึท ืคึผืฉื•ื˜ ืคืขืœื™ืงื™ื™ึทื˜ ืฆื™ืงืœ ืงืขื ืขืŸ ืœื™ื™ื›ื˜ ื˜ื™ื™ื˜ืŸ ื“ื™ื™ืŸ ื“ื™ืกืงืก ืื™ืŸ ืึท ืคึผืึธืจ ืคื•ืŸ ื™ืึธืจืŸ. ื ื™ื˜ ืึทืœืข ื“ื™ืกืงืก ืœื™ื™ื“ืŸ ืคื•ืŸ ื“ืขื, ืึธื‘ืขืจ ืื•ื ื“ื–ืขืจ ื–ืขื ืขืŸ "ืœืึทืคึผื˜ืึทืคึผ" ืึธื ืขืก, ืžื™ื˜ ื“ื™ ืฆื•ื ืขืžืขืŸ ืคืขืœื™ืงื™ื™ึทื˜ ืกืขื˜ื˜ื™ื ื’ืก, ื•ื•ืึธืก ืžืึทื›ืŸ ื“ื™ RAID ืงื•ืง ื•ื•ื™ ืึท ืžื™ื ื™-ืžืึทื™ื“.
  • ื™ื ืกื˜ืึทืœื™ืจืŸ ืœื™ื™ืขื ืขืŸ ืื•ื™ืฃ ื“ื™ืกืงืก (ืจืึธื•ื˜ื™ื™ื˜ื™ื ื’) 1 ืžืขื’ืื‘ื™ื™ื˜ - ืฆื•ื•ื™ื™ ืงืึธื ืกืขืงื•ื˜ื™ื•ื•ืข ื‘ืœืึทืงืก / ื˜ืฉืึทื ื’ RAID 6
  • ื“ื™ืกื™ื™ื‘ืึทืœ ืœื™ื™ืขื ืขืŸ ืคืึธืจื•ื™ืก ืื•ื™ืฃ ื“ื™ ืขืจื™ื™ื– ื–ื™ืš.

ืœืึธืžื™ืจ ืจืขื“ืึทื’ื™ืจืŸ /etc/fstab:

#cat >/etc/fstab << EOF
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
# file-system mount-point type options dump pass
/dev/mapper/root-root / btrfs defaults,space_cache,noatime,nodiratime,discard,subvol=@ 0 1
UUID=$(blkid -o value -s UUID /dev/md1) /boot btrfs defaults,space_cache,noatime,nodiratime,discard 0 2
/dev/mapper/root-root /home btrfs defaults,space_cache,noatime,nodiratime,discard,subvol=@home 0 2
/dev/mapper/root-swap none swap sw 0 0
EOF

ืคืืจื•ื•ืืก ืื™ื– ื“ืึธืก..?ืžื™ืจ ื•ื•ืขืœืŸ ื–ื•ื›ืŸ ืคึฟืึทืจ ื“ื™ / ืฉื˜ื™ื•ื•ืœ ืฆืขื˜ื™ื™ืœื•ื ื’ ื“ื•ืจืš UUID. ืžืขื ื’ืข ื ืึทืžื™ื ื’ ืงืขืŸ ื˜ืขืึธืจืขื˜ื™ืฉ ื˜ื•ื™ืฉืŸ.

ืžื™ืจ ื•ื•ืขืœืŸ ื–ื•ื›ืŸ ืคึฟืึทืจ ื“ื™ ืจื•ืขืŸ ืกืขืงืฉืึทื ื– ื“ื•ืจืš LVM ื ืขืžืขืŸ ืื™ืŸ ื“ื™ /dev/mapper/vg-lv ื ืึธื•ื˜ื™ื™ืฉืึทืŸ, ื•ื•ื™ื™ึทืœ ื–ื™ื™ ื™ื“ืขื ื˜ื™ืคื™ืฆื™ืจืŸ ืคึผืึทืจื˜ื™ืฉืึทื ื– ื’ืึทื ืฅ ื™ื™ื ืฆื™ืง.

ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ UUID ืคึฟืึทืจ LVM ื•ื•ื™ื™ึทืœ ื“ื™ UUID ืคื•ืŸ LVM ื•ื•ืึทืœื™ื•ืžื– ืื•ืŸ ื–ื™ื™ืขืจ ืกื ืึทืคึผืฉืึทืฅ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ื™ ื–ืขืœื‘ืข.Mount /dev/mapper/root-root.. ืฆื•ื•ื™ื™ ืžืึธืœ?ื™ื. ืคึผื•ื ืงื˜. ืฉื˜ืจื™ืš ืคื•ืŸ BTRFS. ื“ืขื ื˜ืขืงืข ืกื™ืกื˜ืขื ืงืขื ืขืŸ ื–ื™ื™ืŸ ืžืึธื•ื ื˜ืขื“ ืขื˜ืœืขื›ืข ืžืึธืœ ืžื™ื˜ ืคืึทืจืฉื™ื“ืขื ืข ืกื•ื‘ื•ื•ืึธืœืก.

ืจืขื›ื˜ ืฆื• ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฉื˜ืจื™ืš, ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืงื™ื™ื ืžืึธืœ ืงืจื™ื™ื™ื˜ื™ื ื’ LVM ืกื ืึทืคึผืฉืึทืฅ ืคื•ืŸ ืึทืงื˜ื™ื•ื• BTRFS ื•ื•ืึทืœื™ื•ืžื–. ืื™ืจ ืงืขืŸ ื‘ืึทืงื•ืžืขืŸ ืึท ื™ื‘ืขืจืจืึทืฉืŸ ื•ื•ืขืŸ ืื™ืจ ืจืขื‘ืึธืึธื˜.

ืœืึธืžื™ืจ ืจืขื’ืขื ืขืจื™ืจืŸ ื“ื™ mdadm ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ:

#/usr/share/mdadm/mkconf | sed 's/#DEVICE/DEVICE/g' >/etc/mdadm/mdadm.conf

ืœืึธืžื™ืจ ืกื˜ืจื•ื™ืขืจืŸ ื“ื™ LVM ืกืขื˜ื˜ื™ื ื’ืก:

#cat >>/etc/lvm/lvmlocal.conf << EOF

activation {
thin_pool_autoextend_threshold=90
thin_pool_autoextend_percent=5
}
allocation {
cache_pool_max_chunks=2097152
}
devices {
global_filter=["r|^/dev/.*_corig$|","r|^/dev/.*_cdata$|","r|^/dev/.*_cmeta$|","r|^/dev/.*gpv$|","r|^/dev/images/.*$|","r|^/dev/mapper/images.*$|","r|^/dev/backup/.*$|","r|^/dev/mapper/backup.*$|"] issue_discards=1
}
EOF

ื•ื•ืืก ืื™ื– ืขืก ื’ืขื•ื•ืขืŸ..?ืžื™ืจ ื”ืึธื‘ืŸ ืขื ื™ื™ื‘ืึทืœื“ ืึธื˜ืึทืžืึทื˜ื™ืง ื™ืงืกืคึผืึทื ืฉืึทืŸ ืคื•ืŸ LVM ื“ื™ืŸ ืคึผืึธืึธืœืก ื•ื•ืขืŸ ืจื™ื˜ืฉื˜ 90% ืคื•ืŸ ื“ื™ ืคืึทืจื ื•ืžืขืŸ ืคึผืœืึทืฅ ืžื™ื˜ 5% ืคื•ืŸ ื“ื™ ื‘ืึทื ื“.

ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขื•ื•ืืงืกืŸ ื“ื™ ืžืึทืงืกื™ืžื•ื ื ื•ืžืขืจ ืคื•ืŸ ืงืึทืฉ ื‘ืœืึทืงืก ืคึฟืึทืจ LVM ืงืึทืฉ.

ืžื™ืจ ื”ืึธื‘ืŸ ืคึผืจื™ื•ื•ืขื ื˜ื™ื“ LVM ืคื•ืŸ ื–ื•ื›ืŸ ืคึฟืึทืจ LVM ื•ื•ืึทืœื™ื•ืžื– (PV) ืื•ื™ืฃ:

  • ื“ืขื•ื•ื™ืกืขืก ืžื™ื˜ LVM ืงืึทืฉ (cdata)
  • ื“ืขื•ื•ื™ืกืขืก ืงืึทืฉื˜ ื ื™ืฆืŸ LVM ืงืึทืฉ, ื‘ื™ื™ืคึผืึทืกื™ื ื’ ื“ื™ ืงืึทืฉ ( _ืงืึธืจื™ื’). ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ื™ ืงืึทืฉื˜ ืžื™ื˜ืœ ื–ื™ืš ื•ื•ืขื˜ ื ืึธืš ื–ื™ื™ืŸ ืกืงืึทื ื“ ื“ื•ืจืš ื“ื™ ืงืึทืฉ (ื ืึธืจ ).
  • ื“ืขื•ื•ื™ืกืขืก ืžื™ื˜ LVM ืงืึทืฉ ืžืขื˜ืึทื“ืึทื˜ืึท (ืงืžืขื˜ืึท)
  • ืึทืœืข ื“ืขื•ื•ื™ืกืขืก ืื™ืŸ VG ืžื™ื˜ ื“ื™ ื ืึธืžืขืŸ ื‘ื™ืœื“ืขืจ. ื“ืึธ ืžื™ืจ ื•ื•ืขืœืŸ ื”ืึธื‘ืŸ ื“ื™ืกืง ื‘ื™ืœื“ืขืจ ืคื•ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ, ืื•ืŸ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื•ื•ืขืœืŸ LVM ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืฆื• ืึทืงื˜ืึทื•ื•ื™ื™ื˜ ื•ื•ืึทืœื™ื•ืžื– ื•ื•ืึธืก ื’ืขื”ืขืจืŸ ืฆื• ื“ื™ ื’ืึทืกื˜ ืึทืก.
  • ืึทืœืข ื“ืขื•ื•ื™ืกืขืก ืื™ืŸ VG ืžื™ื˜ ื“ื™ ื ืึธืžืขืŸ ื‘ืึทืงืึทืคึผ. ื“ืึธ ืžื™ืจ ื•ื•ืขืœืŸ ื”ืึธื‘ืŸ ื‘ืึทืงืึทืคึผ ืงืืคื™ืขืก ืคื•ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ื‘ื™ืœื“ืขืจ.
  • ืึทืœืข ื“ืขื•ื•ื™ืกืขืก ื•ื•ืขืžืขื ืก ื ืึธืžืขืŸ ืขื ื“ืก ืžื™ื˜ "ื’ืคึผื•ื•" (ื’ืึทืกื˜ ื’ืฉืžื™ื•ืช ื‘ืึทื ื“)

ืžื™ืจ ื”ืึธื‘ืŸ ืขื ื™ื™ื‘ืึทืœื“ DISCARD ืฉื˜ื™ืฆืŸ ื•ื•ืขืŸ ืคืจื™ื™ ืคืจื™ื™ ืคึผืœืึทืฅ ืื•ื™ืฃ LVM VG. ื’ื™ื‘ ืื›ื˜ื•ื ื’. ื“ืึธืก ื•ื•ืขื˜ ืžืึทื›ืŸ ื“ื™ืœื™ื˜ื™ื ื’ LVs ืื•ื™ืฃ ื“ื™ SSD ื’ืึทื ืฅ ืฆื™ื™ื˜ ืงืึทื ืกื•ืžื™ื ื’. ื“ืึธืก ืื™ื– ืกืคึผืขืฆื™ืขืœ ืึทืคึผืœื™ื™ื– ืฆื• SSD RAID 6. ืึธื‘ืขืจ, ืœื•ื™ื˜ ื“ืขื ืคึผืœืึทืŸ, ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ื“ื™ืŸ ืคึผืจืึทื•ื•ื™ื–ืฉืึทื ื–, ืึทื–ื•ื™ ื“ืึธืก ื•ื•ืขื˜ ื ื™ืฉื˜ ืฉื˜ืขืจืŸ ืื•ื ื“ื– ืื™ืŸ ืึทืœืข.

ืœืึธืžื™ืจ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ initramfs ื‘ื™ืœื“:

#update-initramfs -u -k all

ื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจ ื’ืจื•ื‘:

#apt-get install grub-pc
#apt-get purge os-prober
#dpkg-reconfigure grub-pc

ื•ื•ืึธืก ื“ื™ืกืงืก ื–ืึธืœ ืื™ืจ ืงืœื™ื™ึทื‘ืŸ?ืืœืข ื•ื•ืืก ื–ืขื ืขืŸ ืกื“*. ื“ื™ ืกื™ืกื˜ืขื ืžื•ื–ืŸ ื–ื™ื™ืŸ ื‘ื™ื›ื•ืœืช ืฆื• ืฉื˜ื™ื•ื•ืœ ืคึฟื•ืŸ ืงื™ื™ืŸ ืืจื‘ืขื˜ืŸ SATA ืคืึธืจ ืึธื“ืขืจ SSD.

ืคืืจื•ื•ืืก ื”ืื‘ืŸ ื–ื™ื™ ืฆื•ื’ืขืœื™ื™ื’ื˜ ืึธืก-ืคึผืจืึธื‘ืขืจ..?ืคึฟืึทืจ ื™ื‘ืขืจื™ืง ื–ืขืœื‘ืกื˜ืฉื˜ืขื ื“ื™ืงื™ื™ึทื˜ ืื•ืŸ ืฉื˜ื™ืคืขืจื™ืฉ ื”ืขื ื˜.

ืขืก ืึทืจื‘ืขื˜ ื ื™ืฉื˜ ืจื™ื›ื˜ื™ืง ืื•ื™ื‘ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ RAIDs ืื™ื– ืื™ืŸ ืึท ื“ื™ื’ืจื™ื™ื“ื™ื“ ืฉื˜ืึทื˜. ืขืก ืคืจื•ื•ื•ื˜ ืฆื• ื–ื•ื›ืŸ ืคึฟืึทืจ ื“ื™ ืึทืก ืื•ื™ืฃ ืคึผืึทืจื˜ื™ืฉืึทื ื– ื•ื•ืึธืก ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ืื™ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ืคืœื™ืกื ื“ื™ืง ืื•ื™ืฃ ื“ืขื ื™ื™ึทื–ื ื•ื•ืึทืจื’.

ืื•ื™ื‘ ืื™ืจ ื“ืึทืจืคึฟืŸ ืขืก, ืื™ืจ ืงืขื ืขืŸ ืœืึธื–ืŸ ืขืก, ืึธื‘ืขืจ ื”ืึทืœื˜ืŸ ืื™ืŸ ื–ื™ื ืขืŸ ืึทืœืข ื“ื™ ืื•ื™ื‘ืŸ. ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืื™ืจ ื–ื•ื›ื˜ ืคึฟืึทืจ ืจืขืกืึทืคึผื™ื– ืคึฟืึทืจ ื‘ืึทืงื•ืžืขืŸ ื‘ืึทืคืจื™ื™ึทืขืŸ ืคื•ืŸ ืฉื˜ื™ืคืขืจื™ืฉ ื”ืขื ื˜ ืึธื ืœื™ื™ืŸ.

ืžื™ื˜ ื“ืขื ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขืขื ื“ื™ืงื˜ ื“ื™ ืขืจืฉื˜ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’. ืขืก ืื™ื– ืฆื™ื™ื˜ ืฆื• ืจืขื‘ืึธืึธื˜ ืื™ืŸ ื“ื™ ื ื™ื™ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืึทืก. ื“ื• ื–ืืœืกื˜ ื ื™ืฉื˜ ืคืึทืจื’ืขืกืŸ ืฆื• ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ื“ื™ ื‘ืึธืึธื˜ืึทื‘ืœืข ืœื™ื™ื•ื• ืงืึธืžืคึผืึทืงื˜ื“ื™ืกืง / ื•ืกื‘.

#exit
#reboot

ืกืขืœืขืงื˜ื™ืจืŸ ืงื™ื™ืŸ ืคื•ืŸ ื“ื™ SATA SSDs ื•ื•ื™ ื“ื™ ืฉื˜ื™ื•ื•ืœ ืžื™ื˜ืœ.

LVM ืื•ื™ืฃ SATA SSD

ืื™ืŸ ื“ืขื ืคื•ื ื˜, ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื‘ื•ื˜ื™ื“ ืื™ืŸ ื“ื™ ื ื™ื™ึทืข ืึทืก, ืงืึทื ืคื™ื’ื™ืขืจื“ ื“ื™ ื ืขืฅ, ืคื™ื™ื™ืง, ื’ืขืขืคื ื˜ ื“ื™ ื•ื•ืึธืงื–ืึทืœ ืขืžื•ืœืึทื˜ืึธืจ ืื•ืŸ ืœืึธื ื˜ืฉื˜:

#sudo bash

ืœืึธืžื™ืจ ืคืึธืจื–ืขืฆืŸ.

"ื™ื ื™ื˜ื™ืึทืœื™ื–ืข" ื“ื™ ืžืขื ื’ืข ืคึฟื•ืŸ SATA SSD:

#blkdiscard /dev/md2

ืื•ื™ื‘ ืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ, ืคึผืจื•ื‘ื™ืจืŸ:

#blkdiscard --step 65536 /dev/md2
ืฉืึทืคึฟืŸ LVM VG ืื•ื™ืฃ SATA SSD:

#pvcreate /dev/md2
#vgcreate data /dev/md2

ืคืืจื•ื•ืืก ืืŸ ืื ื“ืขืจ VG..?ืื™ืŸ ืคืึทืงื˜, ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืึท VG ื’ืขื”ื™ื™ืกืŸ ื•ื•ืึธืจืฆืœ. ืคืืจื•ื•ืืก ื˜ืึธืŸ ื ื™ื˜ ืœื™ื™ื’ืŸ ืึทืœืฅ ืื™ืŸ ืื™ื™ืŸ VG?

ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืคึผื•ื•ืก ืื™ืŸ ืึท VG, ืคึฟืึทืจ ื“ื™ VG ืฆื• ื–ื™ื™ืŸ ืึทืงื˜ื™ื•ื•ื™ื™ื˜ื™ื“ ืจื™ื›ื˜ื™ืง, ืึทืœืข ืคึผื•ื• ืžื•ื–ืŸ ื–ื™ื™ืŸ ืคืึธืจืฉื˜ืขืœืŸ (ืึธื ืœื™ื™ืŸ). ื“ื™ ื•ื™ืกื ืขื ืื™ื– LVM RAID, ื•ื•ืึธืก ืžื™ืจ ื“ื™ืœื™ื‘ืจืึทื˜ืœื™ ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ.

ืžื™ืจ ื˜ืึทืงืข ื•ื•ื™ืœืŸ ืึทื– ืื•ื™ื‘ ืขืก ืื™ื– ืึท ื“ื•ืจื›ืคืึทืœ (ืœื™ื™ืขื ืขืŸ ื“ืึทื˜ืŸ ืึธื ื•ื•ืขืจ) ืื•ื™ืฃ ืงื™ื™ืŸ ืคื•ืŸ ื“ื™ RAID 6 ืขืจื™ื™ื–, ื“ื™ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื ื•ื•ืขื˜ ืฉื˜ื™ื•ื•ืœ ื ืึธืจืžืึทืœื™ ืื•ืŸ ื’ืขื‘ืŸ ืื•ื ื“ื– ื“ื™ ื’ืขืœืขื’ื ื”ื™ื™ื˜ ืฆื• ืกืึธืœื•ื•ืข ื“ืขื ืคึผืจืึธื‘ืœืขื.

ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืžื“ืจื’ื” ืคื•ืŸ ืึทื‘ืกื˜ืจืึทืงืฆื™ืข, ืžื™ืจ ื™ื–ืึธืœื™ืจืŸ ื™ืขื“ืขืจ ื˜ื™ืคึผ ืคื•ืŸ ื’ืฉืžื™ื•ืช "ืžืขื“ื™ืข" ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ VG.

ืกื™ื™ืึทื ื˜ื™ืคื™ืงืœื™ ื’ืขืจืขื“ื˜, ืคืึทืจืฉื™ื“ืขื ืข RAID ืขืจื™ื™ื– ื’ืขื”ืขืจืŸ ืฆื• ืคืึทืจืฉื™ื“ืขื ืข "ืคืึทืจืœืึธื–ืœืขืš ื“ืึธื•ืžื™ื™ื ื–". ืื™ืจ ื–ืึธืœ ื ื™ืฉื˜ ืžืึทื›ืŸ ืึทืŸ ื ืึธืš ืคึผืจืึธืกื˜ ืคื•ื ื˜ ืคื•ืŸ ื“ื•ืจื›ืคืึทืœ ืคึฟืึทืจ ื–ื™ื™ ื“ื•ืจืš ืงืจืึทืžื™ื ื’ ื–ื™ื™ ืื™ืŸ ืื™ื™ืŸ VG.

ื“ื™ ื‘ื™ื™ึทื–ื™ื™ึทืŸ ืคื•ืŸ LVM ืื•ื™ืฃ ื“ื™ "hardware" ืžื“ืจื’ื” ื•ื•ืขื˜ ืœืึธื–ืŸ ืื•ื ื“ื– ืฆื• ืึทืจื‘ื™ื˜ืจืขืจืึทืœื™ ืฉื ื™ื™ึทื“ืŸ ื‘ืจืขืงืœืขืš ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข RAID ืขืจื™ื™ื– ื“ื•ืจืš ืงืึทืžื‘ื™ื™ื ื™ื ื’ ื–ื™ื™ ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืขื’ืŸ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ - ืœื•ื™ืคืŸ ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™ bcache + LVM ื“ื™ืŸ, bcache + BTRFS, LVM cache + LVM ื“ื™ืŸ, ืึท ืงืึธืžืคึผืœืขืงืก ZFS ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžื™ื˜ ืงืึทื˜ืฉืขืก, ืึธื“ืขืจ ืงื™ื™ืŸ ืื ื“ืขืจืข ื›ืขืœื™ืฉ ื’ืขืžื™ืฉ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืื•ืŸ ืคืึทืจื’ืœื™ื™ึทื›ืŸ ืขืก ืึทืœืข.

ืื•ื™ืฃ ื“ื™ "ื”ืึทืจื“ื•ื•ืึทืจืข" ืžื“ืจื’ื”, ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื ื•ืฆืŸ ืขืคึผืขืก ืึทื ื“ืขืจืฉ ื•ื•ื™ ื’ื•ื˜ ืึทืœื˜ "ื“ื™ืง" LVM ื•ื•ืึทืœื™ื•ืžื–. ื“ื™ ื•ื™ืกื ืขื ืฆื• ื“ืขื ื”ืขืจืฉืŸ ืงืขืŸ ื–ื™ื™ืŸ ื“ื™ ื‘ืึทืงืึทืคึผ ืฆืขื˜ื™ื™ืœื•ื ื’.

ืื™ืš ืžื™ื™ืŸ ืึทื– ืื™ืŸ ื“ืขื ืžืึธืžืขื ื˜, ืคื™ืœืข ืœื™ื™ืขื ืขืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ื›ืึธืฉืขื“ ืขืคึผืขืก ื•ื•ืขื’ืŸ ื“ื™ ื ืขืกื˜ื™ื ื’ ืœื™ืึทืœืงืข.

LVM ืื•ื™ืฃ SATA HDD

#pvcreate /dev/md3
#vgcreate backup /dev/md3

ื ื™ื™ึท VG ื•ื•ื™ื“ืขืจ..?ืžื™ืจ ื˜ืึทืงืข ื•ื•ื™ืœืŸ ืึทื– ืื•ื™ื‘ ื“ื™ ื“ื™ืกืง ืžืขื ื’ืข ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ืคึฟืึทืจ ื“ืึทื˜ืŸ ื‘ืึทืงืึทืคึผ ืคื™ื™ืœื–, ืื•ื ื“ื–ืขืจ ืึทืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื ื•ื•ืขื˜ ืคืึธืจื–ืขืฆืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ื ืึธืจืžืึทืœื™, ืื•ืŸ ื”ืึทืœื˜ืŸ ืึทืงืกืขืก ืฆื• ื ื™ื˜-ื‘ืึทืงืึทืคึผ ื“ืึทื˜ืŸ ื•ื•ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš. ื“ืขืจื™ื‘ืขืจ, ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ VG ืึทืงื˜ืึทื•ื•ื™ื™ืฉืึทืŸ ืคึผืจืึธื‘ืœืขืžืก, ืžื™ืจ ืžืึทื›ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ VG.

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ LVM ืงืึทืฉ

ืœืึธืžื™ืจ ืฉืึทืคึฟืŸ ืึท LV ืื•ื™ืฃ NVMe RAID 1 ืฆื• ื ื•ืฆืŸ ืขืก ื•ื•ื™ ืึท ืงืึทื˜ืฉื™ื ื’ ืžื™ื˜ืœ.

#lvcreate -L 70871154688B --name cache root

ืคืืจื•ื•ืืก ืื™ื– ืขืก ืึทื–ื•ื™ ืงืœื™ื™ืŸ ...?ื“ืขืจ ืคืึทืงื˜ ืื™ื– ืึทื– ืื•ื ื“ื–ืขืจ NVMe SSDs ืื•ื™ืš ื”ืึธื‘ืŸ ืึท SLC ืงืึทืฉ. 4 ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ "ืคืจื™ื™" ืื•ืŸ 18 ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ ื“ื™ื ืึทืžื™ืฉ ืจืขื›ื˜ ืฆื• ื“ืขืจ ืคืจื™ื™ ืคึผืœืึทืฅ ืคืึทืจื ื•ืžืขืŸ ืื™ืŸ ื“ื™ 3-ื‘ื™ืกืœ MLC. ืึทืžืึธืœ ื“ืขื ืงืึทืฉ ืื™ื– ื•ื™ืกื’ืขืžืึทื˜ืขืจื˜, NVMe SSDs ื•ื•ืขื˜ ื ื™ืฉื˜ ื–ื™ื™ืŸ ืคื™ืœ ืคืึทืกื˜ืขืจ ื•ื•ื™ ืื•ื ื“ื–ืขืจ SATA SSD ืžื™ื˜ ืงืึทืฉ. ืึทืงื˜ื•ืึทืœืœื™, ืคึฟืึทืจ ื“ืขื ืกื™ื‘ื”, ืขืก ืื™ื– ืงื™ื™ืŸ ื–ื™ื ืขืŸ ืคึฟืึทืจ ืื•ื ื“ื– ืฆื• ืžืึทื›ืŸ ื“ื™ LVM ืงืึทืฉ ืฆืขื˜ื™ื™ืœื•ื ื’ ืคื™ืœ ื’ืจืขืกืขืจืข ื•ื•ื™ ืฆื•ื•ื™ื™ ืžืึธืœ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ SLC ืงืึทืฉ ืคื•ืŸ ื“ื™ NVMe ืคืึธืจ. ืคึฟืึทืจ ื“ื™ NVMe ื“ืจื™ื™ื•ื•ื– ื’ืขื ื™ืฆื˜, ื“ืขืจ ืžื—ื‘ืจ ื”ืืœื˜ ืขืก ื’ืœื™ื™ึทืš ืฆื• ืžืึทื›ืŸ 32-64 ื’ื™ื’ืื‘ื™ื™ื˜ ืงืึทืฉ.

ื“ื™ ื’ืขื’ืขื‘ืŸ ืฆืขื˜ื™ื™ืœื•ื ื’ ื’ืจื™ื™ืก ืื™ื– ืคืืจืœืื ื’ื˜ ืฆื• ืึธืจื’ืึทื ื™ื–ื™ืจืŸ 64 ื’ื™ื’ืื‘ื™ื™ื˜ ืงืึทืฉ, ืงืึทืฉ ืžืขื˜ืึทื“ืึทื˜ืึท ืื•ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท ื‘ืึทืงืึทืคึผ.

ืึทื“ื“ื™ื˜ื™ืึธื ืึทืœืœื™, ืื™ืš ื˜ืึธืŸ ืึทื– ื ืึธืš ืึท ื’ืจืึธื‘ ืกื™ืกื˜ืขื ืฉืึทื˜ื“ืึทื•ืŸ, LVM ื•ื•ืขื˜ ืฆื™ื™ื›ืŸ ื“ื™ ื’ืื ืฆืข ืงืึทืฉ ื•ื•ื™ ื’ืจืึธื‘ ืื•ืŸ ื•ื•ืขื˜ ืกื™ื ื’ืงืจืึทื ื™ื™ื– ื•ื•ื™ื“ืขืจ. ื“ืขืจืฆื•, ื“ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืจื™ืคึผื™ื˜ื™ื“ ื™ืขื“ืขืจ ืžืึธืœ ื•ื•ืขืŸ lvchange ืื™ื– ื’ืขื ื™ืฆื˜ ืื•ื™ืฃ ื“ืขื ืžื™ื˜ืœ ื‘ื™ื– ื“ื™ ืกื™ืกื˜ืขื ืื™ื– ืจืขื‘ืึธืึธื˜ืขื“ ื•ื•ื™ื“ืขืจ. ื“ืขืจื™ื‘ืขืจ, ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ื’ืœื™ื™ืš ืจื™ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ื™ ืงืึทืฉ ืžื™ื˜ ื“ื™ ืฆื•ื ืขืžืขืŸ ืฉืจื™ืคื˜.

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท LV ืื•ื™ืฃ SATA RAID 6 ืฆื• ื ื•ืฆืŸ ืขืก ื•ื•ื™ ืึท ืงืึทืฉื˜ ืžื™ื˜ืœ.

#lvcreate -L 3298543271936B --name cache data

ืคืืจื•ื•ืืก ื ืืจ ื“ืจื™ื™ ื˜ืขืจืื‘ื™ื™ื˜ืก..?ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ SATA SSD RAID 6 ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืื ื“ืขืจืข ื‘ืื“ืขืจืคืขื ื™ืฉืŸ. ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ืงืึทืฉื˜ ืคึผืœืึทืฅ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ืืงืกืŸ ื“ื™ื ืึทืžื™ืงืึทืœืœื™, ืื•ื™ืฃ ื“ื™ ืคืœื™ืขืŸ, ืึธืŸ ืกื˜ืึธืคึผืคึผื™ื ื’ ื“ื™ ืกื™ืกื˜ืขื. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ืขืžืคึผืขืจืขืจืึทืœื™ ื”ืึทืœื˜ืŸ ืื•ืŸ ื’ืขื‘ืŸ ื“ื™ ืงืึทืฉ ื•ื•ื™ื“ืขืจ, ืึธื‘ืขืจ ื“ื™ ืึธืคึผืฉื™ื™ื“ื ื“ื™ืง ืžื™ื™ึทืœืข ืคื•ืŸ โ€‹โ€‹LVM-cache ืื™ื‘ืขืจ, ืœืžืฉืœ, bcache ืื™ื– ืึทื– ื“ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ืื•ื™ืฃ ื“ื™ ืคืœื™ืขืŸ.

ืœืึธืžื™ืจ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข VG ืคึฟืึทืจ ืงืึทื˜ืฉื™ื ื’.

#pvcreate /dev/root/cache
#pvcreate /dev/data/cache
#vgcreate cache /dev/root/cache /dev/data/cache

ื–ืืœ ืก ืžืึทื›ืŸ ืึท LV ืื•ื™ืฃ ื“ื™ ืงืึทืฉื˜ ืžื™ื˜ืœ.

#lvcreate -L 3298539077632B --name cachedata cache /dev/data/cache

ื“ืึธ ืžื™ืจ ืžื™ื“ ื’ืขื ื•ืžืขืŸ ืึทืœืข ื“ื™ ืคืจื™ื™ ืคึผืœืึทืฅ ืื•ื™ืฃ /dev/data/cache ืึทื–ื•ื™ ืึทื– ืึทืœืข ืื ื“ืขืจืข ื ื™ื™ื˜ื™ืง ืคึผืึทืจื˜ื™ืฉืึทื ื– ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ื’ืœื™ื™ืš ืื•ื™ืฃ /dev/root/cache. ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ื‘ืืฉืืคืŸ ืขืคึผืขืก ืื™ืŸ ื“ืขื ืื•ืžืจืขื›ื˜ ืึธืจื˜, ืื™ืจ ืงืขื ืขืŸ ืžืึทืš ืขืก ืžื™ื˜ pvmove.

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืื•ืŸ ื’ืขื‘ืŸ ื“ืขื ืงืึทืฉ:

#lvcreate -y -L 64G -n cache cache /dev/root/cache
#lvcreate -y -L 1G -n cachemeta cache /dev/root/cache
#lvconvert -y --type cache-pool --cachemode writeback --chunksize 64k --poolmetadata cache/cachemeta cache/cache
#lvconvert -y --type cache --cachepool cache/cache cache/cachedata

ืคืืจื•ื•ืืก ืึทื–ืึท ืฉื˜ื™ืง ื’ืจื™ื™ืก..?ื“ื•ืจืš ืคึผืจืึทืงื˜ื™ืฉ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ, ื“ืขืจ ืžื—ื‘ืจ ืื™ื– ื‘ื™ื›ื•ืœืช ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืึทื– ื“ืขืจ ื‘ืขืกื˜ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ืึทื˜ืฉื™ื•ื•ื“ ืื•ื™ื‘ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ LVM ืงืึทืฉ ื‘ืœืึธืง ืงืึธื•ื™ื ืกื™ื™ื“ื– ืžื™ื˜ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ LVM ื“ื™ืŸ ื‘ืœืึธืง. ื“ืขืจืฆื•, ื“ื™ ืงืœืขื ืขืจืขืจ ื“ื™ ื’ืจื™ื™ืก, ื“ื™ ื‘ืขืกืขืจ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึผืขืจืคืึธืจืžื– ืื™ืŸ ืึท ื˜ืจืึทืค ืจืขืงืึธืจื“ื™ื ื’.

64 ืง ืื™ื– ื“ื™ ืžื™ื ื™ืžื•ื ื‘ืœืึธืง ื’ืจื™ื™ืก ืขืจืœื•ื™ื‘ื˜ ืคึฟืึทืจ LVM ื“ื™ืŸ.

ื–ื™ื™ื˜ ืึธืคึผื’ืขื”ื™ื˜ ืฉืจื™ื™ื‘ืŸื‘ืึทืงืง..!ื™ื. ื“ืขื ื˜ื™ืคึผ ืคื•ืŸ ืงืึทืฉ ื“ื™ืคืขืจื– ืฉืจื™ื™ึทื‘ืŸ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืฆื• ื“ื™ ืงืึทืฉื˜ ืžื™ื˜ืœ. ื“ืขื ืžื™ื˜ืœ ืึทื– ืื•ื™ื‘ ื“ื™ ืงืึทืฉ ืื™ื– ืคืึทืจืคืึทืœืŸ, ืื™ืจ ืงืขืŸ ืคืึทืจืœื™ืจืŸ ื“ืึทื˜ืŸ ืื•ื™ืฃ ื“ื™ ืงืึทืฉื˜ ืžื™ื˜ืœ. ืฉืคึผืขื˜ืขืจ, ื“ืขืจ ืžื—ื‘ืจ ื•ื•ืขื˜ ื–ืึธื’ืŸ ืื™ืจ ื•ื•ืึธืก ืžื™ื˜ืœืขืŸ, ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• NVMe RAID 1, ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื ื•ืžืขืŸ ืฆื• ืคืึทืจื’ื™ื˜ื™ืงืŸ ืคึฟืึทืจ ื“ืขื ืจื™ื–ื™ืงื™ืจืŸ.

ื“ืขืจ ืงืึทืฉ ื˜ื™ืคึผ ืื™ื– ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ื‘ืขืงื™ื•ื•ืŸ ืฆื• ืคืึทืจื’ื™ื˜ื™ืงืŸ ืคึฟืึทืจ ื“ื™ ื ืขื‘ืขืš ืจืึทื ื“ืึธื ืฉืจื™ื™ึทื‘ืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ืŸ RAID 6.

ืœืึธืžื™ืจ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ:

#lvs -a -o lv_name,lv_size,devices --units B cache
LV LSize Devices
[cache] 68719476736B cache_cdata(0)
[cache_cdata] 68719476736B /dev/root/cache(0)
[cache_cmeta] 1073741824B /dev/root/cache(16384)
cachedata 3298539077632B cachedata_corig(0)
[cachedata_corig] 3298539077632B /dev/data/cache(0)
[lvol0_pmspare] 1073741824B /dev/root/cache(16640)

ื‘ืœื•ื™ื– [cachedata_corig] ื–ืึธืœ ื–ื™ื™ืŸ ืœื™ื’ืŸ ืื•ื™ืฃ /dev/data/cache. ืื•ื™ื‘ ืขืคึผืขืก ืื™ื– ืคืึทืœืฉ, ื ื•ืฆืŸ pvmove.

ืื™ืจ ืงืขื ืขืŸ ื“ื™ืกื™ื™ื‘ืึทืœ ื“ื™ ืงืึทืฉ ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง ืžื™ื˜ ืื™ื™ืŸ ื‘ืึทืคึฟืขืœ:

#lvconvert -y --uncache cache/cachedata

ื“ืึธืก ืื™ื– ื’ืขื˜ืืŸ ืึธื ืœื™ื™ืŸ. LVM ื•ื•ืขื˜ ืคืฉื•ื˜ ืกื™ื ืง ื“ื™ ืงืึทืฉ ืฆื• ื“ื™ืกืง, ืึทืจืึธืคึผื ืขืžืขืŸ ืขืก ืื•ืŸ ืจืขื ืึทืžืข cachedata_corig ืฆื•ืจื™ืง ืฆื• ืงืึทื˜ืฉืขื“ืึทื˜ืึท.

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ LVM ื“ื™ืŸ

ื–ืืœ ืก ื‘ืขืขืจืขืš ืึธืคึผืฉืึทืฆืŸ ื•ื•ื™ ืคื™ืœ ืคึผืœืึทืฅ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืคึฟืึทืจ LVM ื“ื™ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท:

#thin_metadata_size --block-size=64k --pool-size=6terabytes --max-thins=100000 -u bytes
thin_metadata_size - 3385794560 bytes estimated metadata area size for "--block-size=64kibibytes --pool-size=6terabytes --max-thins=100000"

ืงื™ื™ึทืœืขื›ื™ืง ืึทืจื•ื™ืฃ ืฆื• 4 ื’ื™ื’ืื‘ื™ื™ื˜: 4294967296 ื‘

ืžื•ืœื˜ื™ืคึผืœื™ ืžื™ื˜ ืฆื•ื•ื™ื™ ืื•ืŸ ืœื™ื™ื’ืŸ 4194304B ืคึฟืึทืจ LVM PV ืžืขื˜ืึทื“ืึทื˜ืึท: 8594128896B
ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืฆืขื˜ื™ื™ืœื•ื ื’ ืื•ื™ืฃ NVMe RAID 1 ืฆื• ืฉื˜ืขืœืŸ LVM ื“ื™ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท ืื•ืŸ ื–ื™ื™ืขืจ ื‘ืึทืงืึทืคึผ ืงืึธืคึผื™ืข ืื•ื™ืฃ ืขืก:

#lvcreate -L 8594128896B --name images root

ืฆื• ื•ื•ืืก..?ื“ืึธ ืงืขืŸ ื–ื™ื™ืŸ ื“ื™ ืงืฉื™ื: ืคืืจื•ื•ืืก ืฉื˜ืขืœืŸ LVM ื“ื™ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท ืกืขืคึผืขืจืึทื˜ืœื™ ืื•ื™ื‘ ืขืก ื•ื•ืขื˜ ื ืึธืš ื–ื™ื™ืŸ ืงืึทืฉื˜ ืื•ื™ืฃ NVMe ืื•ืŸ ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ื’ืขืฉื•ื•ื™ื ื“.

ื›ืึธื˜ืฉ ื’ื™ื›ืงื™ื™ึทื˜ ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ื“ืึธ, ืขืก ืื™ื– ื•ื•ื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ืกื™ื‘ื”. ื“ื™ ื–ืึทืš ืื™ื– ืึทื– ื“ืขืจ ืงืึทืฉ ืื™ื– ืึท ืคื•ื ื˜ ืคื•ืŸ ื“ื•ืจื›ืคืึทืœ. ืขืคึผืขืก ืงืขืŸ ืคึผืึทืกื™ืจืŸ ืžื™ื˜ ืื™ื, ืื•ืŸ ืื•ื™ื‘ ื“ื™ LVM ื“ื™ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท ืื™ื– ืงืึทืฉื˜, ื“ืึธืก ื•ื•ืขื˜ ืžืึทื›ืŸ ืึทืœืฅ ื’ืึธืจ ืคืึทืจืคืึทืœืŸ. ืึธืŸ ื’ืึทื ืฅ ืžืขื˜ืึทื“ืึทื˜ืึท, ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื›ึผืžืขื˜ ืื•ืžืžืขื’ืœืขืš ืฆื• ืึทืกืขืžื‘ืึทืœ ื“ื™ืŸ ื•ื•ืึทืœื™ื•ืžื–.

ื“ื•ืจืš ืžืึธื•ื•ื™ื ื’ ื“ื™ ืžืขื˜ืึทื“ืึทื˜ืึท ืฆื• ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื ื™ื˜-ืงืึทืฉื˜, ืึธื‘ืขืจ ืฉื ืขืœ, ื‘ืึทื ื“, ืžื™ืจ ื’ืึทืจืึทื ื˜ื™ืจืŸ ื“ื™ ื–ื™ื›ืขืจืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืžืขื˜ืึทื“ืึทื˜ืึท ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืงืึทืฉ ืึธื ื•ื•ืขืจ ืึธื“ืขืจ ืงืึธืจื•ืคึผืฆื™ืข. ืื™ืŸ ื“ืขื ืคืึทืœ, ืึทืœืข ืฉืขื“ื™ืงืŸ ื’ืขืคึฟื™ืจื˜ ื“ื•ืจืš ืงืึทืฉ ืึธื ื•ื•ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœืึธื•ืงืึทืœื™ื™ื–ื“ ื™ืŸ ื“ื™ืŸ ื•ื•ืึทืœื™ื•ืžื–, ื•ื•ืึธืก ื•ื•ืขื˜ ืคืึทืจืคึผืึธืฉืขื˜ืขืจืŸ ื“ื™ ืึธืคึผื–ื•ืš ืคึผืจืึธืฆืขื“ื•ืจ ืœื•ื™ื˜ ืึธืจื“ืขืจืก ืคื•ืŸ ืžืึทื’ื ืึทื˜ื•ื“. ืžื™ื˜ ืึท ื”ื•ื™ืš ืžืึทืฉืžืึธืขืก, ื“ื™ ื“ืึทืžื™ื“ื–ืฉื™ื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื–ื•ื ื˜ ืžื™ื˜ FS ืœืึธื’ืก.

ื“ืขืจืฆื•, ืื•ื™ื‘ ืึท ืžืึธืžืขื ื˜ื‘ื™ืœื“ ืคื•ืŸ ืึท ื“ื™ืŸ ื‘ืึทื ื“ ืื™ื– ืคืจื™ืขืจ ื’ืขื ื•ืžืขืŸ, ืื•ืŸ ื ืึธืš ื“ืขื ื“ื™ ืงืึทืฉ ืื™ื– ื’ืึธืจ ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื“ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ืึทืžืึธืœ, ื“ืขืจื™ื‘ืขืจ, ืจืขื›ื˜ ืฆื• ื“ืขืจ ื™ื ืขืจืœืขืš ืคึผืœืึทืŸ ืคื•ืŸ LVM ื“ื™ืŸ, ื“ื™ ืึธืจื ื˜ืœืขื›ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืžืึธืžืขื ื˜ื‘ื™ืœื“ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืจืึทื ื˜ื™ื“ ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืงืึทืฉ ืึธื ื•ื•ืขืจ. .

ืœืึธืžื™ืจ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข VG ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ื“ื™ืŸ ืคึผืจืึทื•ื•ื™ื–ืฉืึทื ื–:

#pvcreate /dev/root/images
#pvcreate /dev/cache/cachedata
#vgcreate images /dev/root/images /dev/cache/cachedata

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท ื‘ืขืงืŸ:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T images/thin-pool
ืคืืจื•ื•ืืก -ื– ื™ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ื•ื•ืึธืก ื“ืขืจ ืžืึธื“ืข ืื™ื– ืึทืงื˜ืฉืึทื•ื•ืึทืœื™ ื‘ื“ืขื” ืคึฟืึทืจ - ืฆื• ืคืึทืจืžื™ื™ึทื“ืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ืื™ื™ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืคื•ืŸ ืœื™ืงื™ื ื’ ืฆื• ืืŸ ืื ื“ืขืจ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ื•ื•ืขืŸ ืจื™ื“ื™ืกื˜ืจื™ื‘ื™ื•ื˜ื™ื ื’ ืคึผืœืึทืฅ - ื ื•ืœืœื™ื ื’ ืื™ื– ืึทื“ื™ืฉื ืึทืœื™ ื’ืขื ื™ืฆื˜ ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ื˜ืจืึทืค - ืฉืจื™ื™ื‘ืŸ ืื™ืŸ ื‘ืœืึทืงืก ืงืœืขื ืขืจืขืจ ื•ื•ื™ 64 ืง. ื™ืขื“ืขืจ ืฉืจื™ื™ึทื‘ืŸ ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ 64 ืง ืฆื• ืึท ื‘ื™ื– ืึทื”ืขืจ ืึทื ืึทืœืึทืงื™ื™ื˜ื™ื“ ื’ืขื’ื ื˜ ืคื•ืŸ ื“ื™ ื“ื™ืŸ ื‘ืึทื ื“ ื•ื•ืขื˜ ื•ื•ืขืจืŸ 64 ืง ื‘ืจืขื’-ืึทืœื™ื™ื ื“ ืื™ืŸ ื“ื™ ืงืึทืฉ. ื“ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืฆื• ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืœืขื’ืึทืžืจืข ื“ื•ืจืš ื“ื™ ืงืึทืฉ, ื‘ื™ื™ืคึผืึทืกื™ื ื’ ื“ื™ ืงืึทืฉื˜ ืžื™ื˜ืœ.

ืœืึธืžื™ืจ ืžืึทืš ื“ื™ ืœื•ื•ืก ืฆื• ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืคึผื•ื•ื•ืก:

#pvmove -n images/thin-pool_tdata /dev/root/images /dev/cache/cachedata
#pvmove -n images/lvol0_pmspare /dev/cache/cachedata /dev/root/images
#pvmove -n images/thin-pool_tmeta /dev/cache/cachedata /dev/root/images

ืœืืžื™ืจ ื˜ืฉืขืงืŸ:

#lvs -a -o lv_name,lv_size,devices --units B images
LV LSize Devices
[lvol0_pmspare] 4294967296B /dev/root/images(0)
thin-pool 274877906944B thin-pool_tdata(0)
[thin-pool_tdata] 274877906944B /dev/cache/cachedata(0)
[thin-pool_tmeta] 4294967296B /dev/root/images(1024)

ื–ืืœ ืก ืžืึทื›ืŸ ืึท ื“ื™ืŸ ื‘ืึทื ื“ ืคึฟืึทืจ ื˜ืขืกืฅ:

#lvcreate -V 64G --thin-pool thin-pool --name test images

ืžื™ืจ ื•ื•ืขืœืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ืคึผืึทืงืึทื“ื–ืฉืึทื– ืคึฟืึทืจ ื˜ืขืกืฅ ืื•ืŸ ืžืึธื ื™ื˜ืึธืจื™ื ื’:

#apt-get install sysstat fio

ืึทื–ื•ื™ ืื™ืจ ืงืขื ืขืŸ ืึธื‘ืกืขืจื•ื•ื™ืจืŸ ื“ื™ ื ืึทื˜ื•ืจ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืกื˜ืึธืจื™ื“ื–ืฉ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืฆื™ื™ื˜:

#watch 'lvs --rows --reportformat basic --quiet -ocache_dirty_blocks,cache_settings cache/cachedata && (lvdisplay cache/cachedata | grep Cache) && (sar -p -d 2 1 | grep -E "sd|nvme|DEV|md1|md2|md3|md0" | grep -v Average | sort)'

ื“ืึธืก ืื™ื– ื•ื•ื™ ืžื™ืจ ืงืขื ืขืŸ ืคึผืจื•ื‘ื™ืจืŸ ืื•ื ื“ื–ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ:

#fio --loops=1 --size=64G --runtime=4 --filename=/dev/images/test --stonewall --ioengine=libaio --direct=1
--name=4kQD32read --bs=4k --iodepth=32 --rw=randread
--name=8kQD32read --bs=8k --iodepth=32 --rw=randread
--name=16kQD32read --bs=16k --iodepth=32 --rw=randread
--name=32KQD32read --bs=32k --iodepth=32 --rw=randread
--name=64KQD32read --bs=64k --iodepth=32 --rw=randread
--name=128KQD32read --bs=128k --iodepth=32 --rw=randread
--name=256KQD32read --bs=256k --iodepth=32 --rw=randread
--name=512KQD32read --bs=512k --iodepth=32 --rw=randread
--name=4Kread --bs=4k --rw=read
--name=8Kread --bs=8k --rw=read
--name=16Kread --bs=16k --rw=read
--name=32Kread --bs=32k --rw=read
--name=64Kread --bs=64k --rw=read
--name=128Kread --bs=128k --rw=read
--name=256Kread --bs=256k --rw=read
--name=512Kread --bs=512k --rw=read
--name=Seqread --bs=1m --rw=read
--name=Longread --bs=8m --rw=read
--name=Longwrite --bs=8m --rw=write
--name=Seqwrite --bs=1m --rw=write
--name=512Kwrite --bs=512k --rw=write
--name=256write --bs=256k --rw=write
--name=128write --bs=128k --rw=write
--name=64write --bs=64k --rw=write
--name=32write --bs=32k --rw=write
--name=16write --bs=16k --rw=write
--name=8write --bs=8k --rw=write
--name=4write --bs=4k --rw=write
--name=512KQD32write --bs=512k --iodepth=32 --rw=randwrite
--name=256KQD32write --bs=256k --iodepth=32 --rw=randwrite
--name=128KQD32write --bs=128k --iodepth=32 --rw=randwrite
--name=64KQD32write --bs=64k --iodepth=32 --rw=randwrite
--name=32KQD32write --bs=32k --iodepth=32 --rw=randwrite
--name=16KQD32write --bs=16k --iodepth=32 --rw=randwrite
--name=8KQD32write --bs=8k --iodepth=32 --rw=randwrite
--name=4kQD32write --bs=4k --iodepth=32 --rw=randwrite
| grep -E 'read|write|test' | grep -v ioengine

ืงืขืจืคืึทืœื™! ืžื™ื˜ืœ!ื“ืขืจ ืงืึธื“ ื•ื•ืขื˜ ืœื•ื™ืคืŸ 36 ืคืึทืจืฉื™ื“ืขื ืข ื˜ืขืกืฅ, ื™ืขื“ืขืจ ืคืœื™ืกื ื“ื™ืง ืคึฟืึทืจ 4 ืกืขืงื•ื ื“ืขืก. ื”ืขืœืคื˜ ืคื•ืŸ ื“ื™ ื˜ืขืกืฅ ื–ืขื ืขืŸ ืคึฟืึทืจ ืจืขืงืึธืจื“ื™ื ื’. ืื™ืจ ืงืขื ืขืŸ ืจืขืงืึธืจื“ื™ืจืŸ ืึท ืคึผืœืึทืฅ ืื•ื™ืฃ NVMe ืื™ืŸ 4 ืกืขืงื•ื ื“ืขืก. ืึทืจื•ื™ืฃ ืฆื• 3 ื’ื™ื’ืื‘ื™ื™ื˜ ืคึผืขืจ ืกืขืงื•ื ื“ืข. ืึทื–ื•ื™, ื™ืขื“ืขืจ ืœื•ื™ืคืŸ ืคื•ืŸ ืฉืจื™ื™ื‘ืŸ ื˜ืขืกืฅ ืงืขื ืขืŸ ืขืกืŸ ืึทืจื•ื™ืฃ ืฆื• 216 ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ ืกืกื“ ืžื™ื˜ืœ ืคื•ืŸ ืื™ืจ.

ืœื™ื™ืขื ืขืŸ ืื•ืŸ ืฉืจื™ื™ื‘ืŸ ื’ืขืžื™ืฉื˜?ื™ื. ืขืก ืžืื›ื˜ ื–ื™ื ืขืŸ ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืœื™ื™ืขื ืขืŸ ืื•ืŸ ืฉืจื™ื™ึทื‘ืŸ ื˜ืขืกืฅ ืกืขืคึผืขืจืึทื˜ืœื™. ื“ืขืจืฆื•, ืขืก ืื™ื– ื–ื™ื ืขืŸ ืฆื• ืขื ืฉื•ืจ ืึทื– ืึทืœืข ืงืึทื˜ืฉืขืก ื–ืขื ืขืŸ ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื“ ืึทื–ื•ื™ ืึทื– ืึท ืคืจื™ืขืจ ื’ืขืžืื›ื˜ ืฉืจื™ื™ึทื‘ืŸ ื˜ื•ื˜ ื ื™ืฉื˜ ื•ื•ื™ืจืงืŸ ื“ื™ ืœื™ื™ืขื ืขืŸ.

ื“ื™ ืจืขื–ื•ืœื˜ืื˜ืŸ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ื–ื™ื™ืขืจ ืึทื ื“ืขืจืฉ ื‘ืขืฉืึทืก ื“ืขืจ ืขืจืฉื˜ืขืจ ืงืึทื˜ืขืจ ืื•ืŸ ื“ืขืจื ืึธืš ื•ื•ืขืŸ ื“ื™ ืงืึทืฉ ืื•ืŸ ื“ื™ืŸ ื‘ืึทื ื“ ืคึผืœืึธืžื‘ื™ืจืŸ ื–ื™ืš, ืื•ืŸ ืื•ื™ืš ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ืฆื™ ื“ื™ ืกื™ืกื˜ืขื ืื™ื– ื’ืขืจืื˜ืŸ ืฆื• ืกื™ื ื’ืงืจืึทื ื™ื™ื– ื“ื™ ืงืึทื˜ืฉืขืก ืึธื ื’ืขืคื™ืœื˜ ื‘ืขืฉืึทืก ื“ื™ ืœืขืฆื˜ืข ืงืึทื˜ืขืจ.

ืฆื•ื•ื™ืฉืŸ ืื ื“ืขืจืข ื–ืื›ืŸ, ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืžืขืกื˜ืŸ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืื•ื™ืฃ ืึท ืฉื•ื™ืŸ ืคื•ืœ ื“ื™ืŸ ื‘ืึทื ื“ ืคื•ืŸ ื•ื•ืึธืก ืึท ืžืึธืžืขื ื˜ื‘ื™ืœื“ ืื™ื– ืคึผื•ื ืงื˜ ื’ืขื ื•ืžืขืŸ. ื“ืขืจ ืžื—ื‘ืจ ื”ืื˜ ื“ื™ ื’ืขืœืขื’ื ื”ื™ื™ื˜ ืฆื• ืึธื‘ืกืขืจื•ื•ื™ืจืŸ ื•ื•ื™ ื˜ืจืึทืค - ืฉืจื™ื™ื‘ื˜ ืคืึทืจื’ื™ื›ืขืจืŸ ืฉืืจืฃ ืžื™ื“ ื ืึธืš ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ื™ ืขืจืฉื˜ืขืจ ืžืึธืžืขื ื˜ื‘ื™ืœื“, ืกืคึผืขืฆื™ืขืœ ื•ื•ืขืŸ ื“ื™ ืงืึทืฉ ืื™ื– ื ืึธืš ื ื™ืฉื˜ ื’ืึธืจ ืคื•ืœ. ื“ืึธืก ื›ืึทืคึผืึทื ื– ืจืขื›ื˜ ืฆื• ืงืึธืคึผื™ืข-ืื•ื™ืฃ-ืฉืจื™ื™ื‘ ืฉืจื™ื™ึทื‘ืŸ ืกืขืžืึทื ื˜ื™ืงืก, ืึทืœื™ื™ื ืžืึทื ื˜ ืคื•ืŸ ืงืึทืฉ ืื•ืŸ ื“ื™ืŸ ื‘ืึทื ื“ ื‘ืœืึทืงืก, ืื•ืŸ ื“ืขืจ ืคืึทืงื˜ ืึทื– ืึท ื˜ืจืึทืค - ืฉืจื™ื™ึทื‘ืŸ ืฆื• RAID 6 ื˜ื•ืจื ืก ืื™ืŸ ืึท ื˜ืจืึทืค - ืœื™ื™ืขื ืขืŸ ืคึฟื•ืŸ RAID 6 ื ืื›ื’ืขื’ืื ื’ืขืŸ ื“ื•ืจืš ืึท ืฉืจื™ื™ึทื‘ืŸ ืฆื• ื“ื™ ืงืึทืฉ. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ื˜ืจืึทืค - ืœื™ื™ืขื ืขืŸ ืคื•ืŸ RAID 6 ืื™ื– ืึทืจื•ื™ืฃ ืฆื• 6 ืžืืœ (ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ SATA SSDs ืื™ืŸ ื“ื™ ืžืขื ื’ืข) ืคืึทืกื˜ืขืจ ื•ื•ื™ ืฉืจื™ื™ื‘ืŸ. ื•ื•ื™ื™ึทืœ ื‘ืœืึทืงืก ืคึฟืึทืจ ืงืึธื•ื• ื–ืขื ืขืŸ ืึทืœืึทืงื™ื™ื˜ื™ื“ ืกืึทืงื•ื•ืขื ื˜ืฉืึทืœื™ ืคึฟื•ืŸ ืึท ื“ื™ืŸ ื‘ืขืงืŸ, ืื•ืŸ ื“ื™ ืจืขืงืึธืจื“ื™ื ื’, ืคึฟืึทืจ ื“ื™ ืจื•ื‘ึฟ ื˜ื™ื™ืœ, ืื•ื™ืš ื˜ื•ืจื ืก ืื™ืŸ ืกืึทืงื•ื•ืขื ื˜ืฉืึทืœ.

ื‘ื™ื™ื“ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืฆื• ื“ื™ื™ืŸ ืžื™ื™ึทืœืข.

ืงืึทืฉ "ืงืึธื”ืขืจืึทื ื˜" ืกื ืึทืคึผืฉืึทืฅ

ืฆื• ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ืจื™ื–ื™ืงื™ืจืŸ ืคื•ืŸ ื“ืึทื˜ืŸ ืึธื ื•ื•ืขืจ ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืงืึทืฉ ืฉืขื“ื™ืงืŸ / ืึธื ื•ื•ืขืจ, ื“ืขืจ ืžื—ื‘ืจ ืœื™ื™ื’ื˜ ืฆื• ื‘ืึทืงืขื ืขืŸ ื“ื™ ืคื™ืจ ืคื•ืŸ ืจืึธื•ื˜ื™ื™ื˜ื™ื ื’ ืกื ืึทืคึผืฉืึทืฅ ืฆื• ื’ืึทืจืึทื ื˜ื™ืจืŸ ื–ื™ื™ืขืจ ืึธืจื ื˜ืœืขื›ืงื™ื™ึทื˜ ืื™ืŸ ื“ืขื ืคืึทืœ.

ืขืจืฉื˜ืขืจ, ื•ื•ื™ื™ึทืœ ื“ื™ืŸ ื‘ืึทื ื“ ืžืขื˜ืึทื“ืึทื˜ืึท ืจื™ื–ื™ื™ื“ื– ืื•ื™ืฃ ืึท ืึทื ืงืึทื˜ืฉืขื“ ืžื™ื˜ืœ, ื“ื™ ืžืขื˜ืึทื“ืึทื˜ืึท ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืึธื ืกื™ืกื˜ืขื ื˜ ืื•ืŸ ืžืขื’ืœืขืš ืœืึธืกืกืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืืคื’ืขื–ื•ื ื“ืขืจื˜ ืื™ืŸ ื“ืึทื˜ืŸ ื‘ืœืึทืงืก.

ื“ื™ ืคืืœื’ืขื ื“ืข ืžืึธืžืขื ื˜ื‘ื™ืœื“ ืจืึธื•ื˜ื™ื™ืฉืึทืŸ ืฆื™ืงืœ ื’ืขืจืึทื ื˜ื™ื– ื“ื™ ืึธืจื ื˜ืœืขื›ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื™ืŸ ื“ื™ ืกื ืึทืคึผืฉืึทืฅ ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืงืึทืฉ ืึธื ื•ื•ืขืจ:

  1. ืคึฟืึทืจ ื™ืขื“ืขืจ ื“ื™ืŸ ื‘ืึทื ื“ ืžื™ื˜ ื“ื™ ื ืึธืžืขืŸ <ื ืึธืžืขืŸ>, ืžืึทื›ืŸ ืึท ืžืึธืžืขื ื˜ื‘ื™ืœื“ ืžื™ื˜ ื“ื™ ื ืึธืžืขืŸ <ื ืึธืžืขืŸ>.ืงืึทื˜ืฉืขื“
  2. ืœืึธืžื™ืจ ืฉื˜ืขืœืŸ ื“ื™ ืžื™ื’ืจืึทื˜ื™ืึธืŸ ืฉื•ื•ืขืœ ืฆื• ืึท ื’ืœื™ื™ึทืš ื”ื•ื™ืš ื•ื•ืขืจื˜: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. ืื™ืŸ ื“ื™ ืฉืœื™ื™ืฃ ืžื™ืจ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ื’ืจืึธื‘ ื‘ืœืึทืงืก ืื™ืŸ ื“ื™ ืงืึทืฉ: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' ื‘ื™ื– ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื ื•ืœ. ืื•ื™ื‘ ื“ื™ ื ื•ืœ ืื™ื– ืคืขืœื ื“ื™ืง ืคึฟืึทืจ ืฆื• ืœืึทื ื’, ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ ื“ื•ืจืš ื˜ืขืžืคึผืขืจืขืจืึทืœื™ ื‘ืึทืฉื˜ื™ืžืขืŸ ื“ื™ ืงืึทืฉ ืฆื• ืฉืจื™ื™ื‘ืŸ ืžืึธื“ืข. ืึธื‘ืขืจ, ืžื™ื˜ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืงืขืจืึทืงื˜ืขืจื™ืกื˜ื™ืงืก ืคื•ืŸ ืื•ื ื“ื–ืขืจ SATA ืื•ืŸ NVMe SSD ืขืจื™ื™ื–, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื–ื™ื™ืขืจ TBW ืžื™ื˜ืœ, ืื™ืจ ืงืขื ืขืŸ ื’ืขืฉื•ื•ื™ื ื“ ื›ืึทืคึผืŸ ื“ืขื ืžืึธืžืขื ื˜ ืึธืŸ ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ืงืึทืฉ ืžืึธื“ืข, ืึธื“ืขืจ ื“ื™ื™ืŸ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ื•ื•ืขื˜ ื’ืึธืจ ืขืกืŸ ื“ื™ ื’ืื ืฆืข ืžื™ื˜ืœ ืื™ืŸ ืขื˜ืœืขื›ืข ื˜ืขื’. ืจืขื›ื˜ ืฆื• ืžื™ื˜ืœ ืœื™ืžื™ื˜ื™ื™ืฉืึทื ื–, ื“ื™ ืกื™ืกื˜ืขื ืื™ื–, ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ, ื ื™ื˜ ื‘ื™ื›ื•ืœืช ืฆื• ื–ื™ื™ืŸ ืื•ื ื˜ืขืจ 100% ืฉืจื™ื™ึทื‘ืŸ ืžืึทืกืข ืึทืœืข ื“ื™ ืฆื™ื™ื˜. ืื•ื ื“ื–ืขืจ NVMe SSDs ืื•ื ื˜ืขืจ 100% ืฉืจื™ื™ึทื‘ืŸ ืžืึทืกืข ื•ื•ืขื˜ ื’ืึธืจ ื•ื™ืกืžืึทื˜ืขืจืŸ ื“ื™ ืžื™ื˜ืœ ืื™ืŸ 3-4 ื˜ืขื’. SATA SSDs ื•ื•ืขื˜ ื“ื•ื™ืขืจืŸ ื‘ืœื•ื™ื– ืฆื•ื•ื™ื™ ืžืึธืœ ื•ื•ื™ ืœืึทื ื’. ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื•ื•ืขืœืŸ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ืจื•ื‘ึฟ ืคื•ืŸ ื“ื™ ืžืึทืกืข ื’ื™ื™ื˜ ืฆื• ืœื™ื™ืขื ืขืŸ, ืื•ืŸ ืžื™ืจ ื”ืึธื‘ืŸ ืœืขืคื™ืขืจืขืš ืงื•ืจืฅ-ื˜ืขืจืžื™ืŸ ืคึผืœืึทืฆืŸ ืคื•ืŸ ื’ืึธืจ ื”ื•ื™ืš ื˜ืขื˜ื™ืงื™ื™ื˜ ืงืึทืžื‘ื™ื™ื ื“ ืžื™ื˜ ืึท ื ื™ื“ืขืจื™ืง ืžืึทืกืข ืื™ืŸ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš ืคึฟืึทืจ ืฉืจื™ื™ื‘ืŸ.
  4. ื•ื•ื™ ื‘ืึทืœื“ ื•ื•ื™ ืžื™ืจ ื’ืขื›ืืคื˜ (ืึธื“ืขืจ ื’ืขืžืื›ื˜) ืึท ื ื•ืœ, ืžื™ืจ ืจืขื ืึทืžืข <ื ืึธืžืขืŸ>.ืงืึทื˜ืฉืขื“ ืฆื• <ื ืึธืžืขืŸ>.ืงืึทืžืžื™ื˜ื˜ืขื“. ื“ืขืจ ืึทืœื˜ <ื ืึธืžืขืŸ>.ืงืึทืžืžื™ื˜ืขื“ ืื™ื– ืื•ื™ืกื’ืขืžืขืงื˜.
  5. ืึธืคึผื˜ื™ืึธื ืึทืœืœื™, ืื•ื™ื‘ ื“ืขืจ ืงืึทืฉ ืื™ื– 100% ืคื•ืœ, ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ืงืจื™ื™ื™ื˜ื™ื“ ื“ื•ืจืš ืึท ืฉืจื™ืคื˜, ืึทื–ื•ื™ ืงืœืึธืจ ืขืก. ืžื™ื˜ ืึท ื”ืึทืœื‘-ืœื™ื™ื“ื™ืง ืงืึทืฉ, ื“ื™ ืกื™ืกื˜ืขื ืึทืจื‘ืขื˜ ืคื™ืœ ืคืึทืกื˜ืขืจ ื•ื•ืขืŸ ืฉืจื™ื™ื‘ืŸ.
  6. ืฉื˜ืขืœืŸ ื“ื™ ืžื™ื™ื’ืจื™ื™ืฉืึทืŸ ืฉื•ื•ืขืœ ืฆื• ื ื•ืœ: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata ื“ืึธืก ื•ื•ืขื˜ ื˜ืขืžืคึผืขืจืขืจืึทืœื™ ืคืึทืจืžื™ื™ึทื“ืŸ ื“ื™ ืงืึทืฉ ืคื•ืŸ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืฆื• ื“ื™ ื”ื•ื™ืคึผื˜ ืžื™ื“ื™ืึท.
  7. ืžื™ืจ ื•ื•ืึทืจื˜ืŸ ื‘ื™ื– ื’ืึทื ืฅ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ ืื™ืŸ ื“ื™ ืงืึทืฉ #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' ืึธื“ืขืจ ื“ื™ ื˜ื™ื™ึทืžืขืจ ื•ื•ืขื˜ ื’ื™ื™ืŸ ืึทื•ื•ืขืง.
  8. ืžื™ืจ ืื™ื‘ืขืจื—ื–ืจืŸ ื•ื•ื™ื“ืขืจ.

ืคืืจื•ื•ืืก ืฉื•ื•ืขืจื™ืงื™ื™ื˜ืŸ ืžื™ื˜ ืžื™ื™ื’ืจื™ื™ืฉืึทืŸ ืฉื•ื•ืขืœ ...?ื“ื™ ื–ืึทืš ืื™ื– ืึทื– ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืคื™ืจ, ืึท "ืจืึทื ื“ืึธื" ืจืขืงืึธืจื“ื™ื ื’ ืื™ื– ืคืืงื˜ื™ืฉ ื ื™ืฉื˜ ื’ืึธืจ ื˜ืจืึทืค. ืื•ื™ื‘ ืžื™ืจ ื’ืขืฉืจื™ื‘ืŸ ืขืคึผืขืก ืฆื• ืึท ืกืขืงื˜ืึธืจ ืคื•ืŸ 4 ืงื™ืœืื‘ื™ื™ื˜ ืื™ืŸ ื’ืจื™ื™ืก, ืขืก ืื™ื– ืึท ื”ื•ื™ืš ืžืึทืฉืžืึธืขืก ืึทื– ืื™ืŸ ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืคึผืึธืจ ืคื•ืŸ ืžื™ื ื•ื˜ ืึท ืจืขืงืึธืจื“ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืžืื›ื˜ ืฆื• ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืึธื“ืขืจ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืืจื•ืžื™ืงืข (+- 32 ืง) ืกืขืงื˜ืึธืจืก.

ื“ื•ืจืš ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™ ืžื™ื™ื’ืจื™ื™ืฉืึทืŸ ืฉื•ื•ืขืœ ืฆื• ื ื•ืœ, ืžื™ืจ ืึธืคึผืœื™ื™ื’ืŸ ืฉืจื™ื™ื‘ืŸ ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ ืื•ื™ืฃ ื“ื™ SATA SSD ืื•ืŸ ืฆื•ื ื•ื™ืคื’ื™ืกืŸ ืขื˜ืœืขื›ืข ืขื ื“ืขืจื•ื ื’ืขืŸ ืฆื• ืื™ื™ืŸ 64K ื‘ืœืึธืง ืื™ืŸ ื“ื™ ืงืึทืฉ. ื“ืึธืก ืกืึทื•ื•ืขืก ื‘ืื˜ื™ื™ื˜ื™ืง ื“ื™ ืžื™ื˜ืœ ืคื•ืŸ SATA SSD.

ื•ื•ื• ืื™ื– ื“ื™ ืงืึธื“..?ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ื“ืขืจ ืžื—ื‘ืจ ื”ืืœื˜ ื–ื™ืš ื ื™ื˜ ื’ืขื ื•ื’ื™ืง ืงืึธืžืคึผืขื˜ืขื ื˜ ืื™ืŸ ื“ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ื‘ืึทืฉ ืกืงืจื™ืคึผืก ื•ื•ื™ื™ึทืœ ืขืจ ืื™ื– 100% ื–ืขืœื‘ืกื˜-ื’ืขืœืขืจื ื˜ ืื•ืŸ ืคึผืจืึทืงื˜ื™ืกื™ื– "ื’ื•ื’ืœ"-ื’ืขื˜ืจื™ื‘ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’, ื“ืขืจื™ื‘ืขืจ ืขืจ ื’ืœื•ื™ื‘ื˜ ืึทื– ื“ื™ ืฉืจืขืงืœืขืš ืงืึธื“ ื•ื•ืึธืก ืงื•ืžื˜ ืื•ื™ืก ืคื•ืŸ ื–ื™ื™ืŸ ื”ืขื ื˜ ื–ืึธืœ ื ื™ืฉื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื“ื•ืจืš ื•ื•ืขืจ ืขืก ื™ื–. ืึทื ื“ืขืจืฉ.

ืื™ืš ื˜ืจืึทื›ื˜ืŸ ืึทื– ืคึผืจืึธืคืขืกืกื™ืึธื ืึทืœืก ืื™ืŸ ื“ืขื ืคืขืœื“ ืงืขื ืขืŸ ื™ื ื“ื™ืคึผืขื ื“ืึทื ื˜ืœื™ ื•ื™ืกืžืึธืœืŸ ืึทืœืข ื“ื™ ืื•ื™ื‘ืŸ ื“ื™ืกืงืจื™ื™ื‘ื“ ืœืึธื’ื™ืง, ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืื•ืŸ, ื˜ืึธืžืขืจ, ืืคื™ืœื• ื‘ื™ื•ื˜ืึทืคืœื™ ืคึผืœืึทืŸ ืขืก ื•ื•ื™ ืึท ืกื™ืกื˜ืขื ื“ื™ื ืกื˜, ื•ื•ื™ ื“ืขืจ ืžื—ื‘ืจ ื’ืขืคืจื•ื•ื•ื˜ ืฆื• ื˜ืึธืŸ.

ืึทื–ืึท ืึท ืคึผืฉื•ื˜ ืžืึธืžืขื ื˜ื‘ื™ืœื“ ืจืึธื•ื˜ื™ื™ืฉืึทืŸ ืกื›ืขืžืข ื•ื•ืขื˜ ืœืึธื–ืŸ ืื•ื ื“ื– ื ื™ื˜ ื‘ืœื•ื™ื– ืงืขืกื™ื™ื“ืขืจ ื”ืึธื‘ืŸ ืื™ื™ืŸ ืžืึธืžืขื ื˜ื‘ื™ืœื“ ื’ืึธืจ ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื“ ืื•ื™ืฃ ื“ื™ SATA SSD, ืึธื‘ืขืจ ืื•ื™ืš ืœืึธื–ืŸ ืื•ื ื“ื–, ื ื™ืฆืŸ ื“ื™ Thin_delta ื ื•ืฆืŸ, ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืื•ื™ืก ื•ื•ืึธืก ื‘ืœืึทืงืก ื–ืขื ืขืŸ ื˜ืฉื™ื™ื ื“ื–ืฉื“ ื ืึธืš ื–ื™ื™ืŸ ืฉืึทืคื•ื ื’, ืื•ืŸ ืึทื–ื•ื™ ืœืึธืงืึทืœื™ื–ื™ืจืŸ ืฉืขื“ื™ืงืŸ ืื•ื™ืฃ. ื“ื™ ื”ื•ื™ืคึผื˜ ื•ื•ืึทืœื™ื•ืžื–, ื–ื™ื™ืขืจ ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ืึธืคึผื–ื•ืš.

TRIM / DISCARD ืื™ืŸ libvirt / KVM

ื•ื•ื™ื™ึทืœ ื“ื™ ื“ืึทื˜ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื ื•ืฆื˜ ืคึฟืึทืจ KVM ืคืœื™ืกื ื“ื™ืง ืœื™ื‘ื•ื•ื™ืจื˜, ืขืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ืึท ื’ื•ื˜ืข ื’ืขื“ืึทื ืง ืฆื• ืœืขืจื ืขืŸ ืื•ื ื“ื–ืขืจ VMs ื ื™ื˜ ื‘ืœื•ื™ื– ืฆื• ื ืขืžืขืŸ ืคืจื™ื™ ืคึผืœืึทืฅ, ืึธื‘ืขืจ ืื•ื™ืš ืฆื• ื‘ืึทืคืจื™ื™ึทืขืŸ ื•ื•ืึธืก ืื™ื– ื ื™ื˜ ืžืขืจ ื“ืืจืฃ.

ื“ืขื ืื™ื– ื’ืขืฉืขืŸ ื“ื•ืจืš ืขืžื™ืึทืœื™ื™ื˜ื™ื ื’ TRIM / DISCARD ืฉื˜ื™ืฆืŸ ืื•ื™ืฃ ื•ื•ื™ืจื˜ื•ืึทืœ ื“ื™ืกืงืก. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ื•ื™ืฉืŸ ื“ื™ ืงืึธื ื˜ืจืึธืœืœืขืจ ื˜ื™ืคึผ ืฆื• virtio-scsi ืื•ืŸ ืจืขื“ืึทื’ื™ืจืŸ ื“ื™ xml.

#virsh edit vmname
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='writethrough' io='threads' discard='unmap'/>
<source dev='/dev/images/vmname'/>
<backingStore/>
<target dev='sda' bus='scsi'/>
<alias name='scsi0-0-0-0'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>

<controller type='scsi' index='0' model='virtio-scsi'>
<alias name='scsi0'/>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</controller>

ืึทื–ืึท ื“ื™ืกืงืึทืจื“ืก ืคื•ืŸ ื’ืึทืกื˜ ืึธืกืขืก ื–ืขื ืขืŸ ืจื™ื›ื˜ื™ืง ืคึผืจืึทืกืขืกื˜ ื“ื•ืจืš LVM, ืื•ืŸ ื‘ืœืึทืงืก ื–ืขื ืขืŸ ืคืจื™ื™ ืจื™ื›ื˜ื™ืง ื‘ื™ื™ื“ืข ืื™ืŸ ื“ื™ ืงืึทืฉ ืื•ืŸ ืื™ืŸ ื“ื™ ื“ื™ืŸ ื‘ืขืงืŸ. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ื“ืึธืก ื›ืึทืคึผืึทื ื– ื“ืขืจ ื”ื•ื™ืคึผื˜ ืื™ืŸ ืึท ื“ื™ืœื™ื™ื“ ืฉื˜ื™ื™ื’ืขืจ, ื•ื•ืขืŸ ื“ื™ืœื™ื˜ื™ื ื’ ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืžืึธืžืขื ื˜ื‘ื™ืœื“.

BTRFS ื‘ืึทืงืงื•ืคึผ

ื ื™ืฆืŸ ืคืึทืจื˜ื™ืง ืกืงืจื™ืคึผืก ืžื™ื˜ ืขืงืกื˜ืจืขื ื•ื•ืึธืจืขื ืขืŸ ืื•ืŸ ืื•ื™ืฃ ื“ื™ ืื™ื™ื’ืขื ืข ืจื™ื–ื™ืงื™ืจืŸ. ื“ืขืจ ืžื—ื‘ืจ ื”ืื˜ ื’ืขืฉืจื™ื‘ืŸ ื“ืขื ืงืึธื“ ื–ื™ืš ืื•ืŸ ืื•ื™ืกืฉืœื™ืกืœืขืš ืคึฟืึทืจ ื–ื™ืš. ืื™ืš ื‘ื™ืŸ ื–ื™ื›ืขืจ ืึทื– ืคื™ืœืข ื™ืงืกืคึผื™ืจื™ืึทื ืกื˜ ืœื™ื ื•ืงืก ื™ื•ื–ืขืจื– ื”ืึธื‘ืŸ ืขื ืœืขืš ืžื›ืฉื™ืจื™ื, ืื•ืŸ ืขืก ืื™ื– ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ื ืึธื›ืžืึทื›ืŸ ืขืžืขืฆืขืจ ืึทื ื“ืขืจืฉ.

ื–ืืœ ืก ืžืึทื›ืŸ ืึท ื‘ืึทื ื“ ืื•ื™ืฃ ื“ื™ ื‘ืึทืงืึทืคึผ ืžื™ื˜ืœ:

#lvcreate -L 256G --name backup backup

ื–ืืœ ืก ืคึฟืึธืจืžืึทื˜ ืขืก ืื™ืŸ BTRFS:

#mkfs.btrfs /dev/backup/backup

ืœืึธืžื™ืจ ืžืึทื›ืŸ ื‘ืืจื’ ืคื•ื ืงื˜ืŸ ืื•ืŸ ืึธื ืงืœืึทืคึผืŸ ื“ื™ ื•ื•ืึธืจืฆืœ ืกืึทื‘ืกืขืงืฉืึทื ื– ืคื•ืŸ ื“ื™ ื˜ืขืงืข ืกื™ืกื˜ืขื:

#mkdir /backup
#mkdir /backup/btrfs
#mkdir /backup/btrfs/root
#mkdir /backup/btrfs/back
#ln -s /boot /backup/btrfs
# cat >>/etc/fstab << EOF

/dev/mapper/root-root /backup/btrfs/root btrfs defaults,space_cache,noatime,nodiratime 0 2
/dev/mapper/backup-backup /backup/btrfs/back btrfs defaults,space_cache,noatime,nodiratime 0 2
EOF
#mount -a
#update-initramfs -u
#update-grub

ืœืึธืžื™ืจ ืžืึทื›ืŸ ื“ื™ื™ืจืขืงื˜ืขืจื™ื– ืคึฟืึทืจ ื‘ืึทืงืึทืคึผืก:

#mkdir /backup/btrfs/back/remote
#mkdir /backup/btrfs/back/remote/root
#mkdir /backup/btrfs/back/remote/boot

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืคึฟืึทืจ ื‘ืึทืงืึทืคึผ ืกืงืจื™ืคึผืก:

#mkdir /root/btrfs-backup

ืœืึธืžื™ืจ ื ืึธื›ืžืึทื›ืŸ ื“ืขื ืฉืจื™ืคื˜:

ืคื™ืœืข ืกืงืขืจื™ ื‘ืึทืฉ ืงืึธื“. ื ื™ืฆืŸ ืื™ืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืŸ ืจื™ื–ื™ืงื™ืจืŸ. ืฉืจื™ื™ื‘ ื ื™ืฉื˜ ื‘ื™ื™ื– ื‘ืจื™ื•ื• ืฆื• ื“ืขื ืžื—ื‘ืจ ...#cat >/root/btrfs-backup/btrfs-backup.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

LOCK_FILE="/dev/shm/$SCRIPT_NAME.lock"
DATE_PREFIX='%Y-%m-%d'
DATE_FORMAT=$DATE_PREFIX'-%H-%M-%S'
DATE_REGEX='[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
BASE_SUFFIX=".@base"
PEND_SUFFIX=".@pend"
SNAP_SUFFIX=".@snap"
MOUNTS="/backup/btrfs/"
BACKUPS="/backup/btrfs/back/remote/"

function terminate ()
{
echo "$1" >&2
exit 1
}

function wait_lock()
{
flock 98
}

function wait_lock_or_terminate()
{
echo "Wating for lock..."
wait_lock || terminate "Failed to get lock. Exiting..."
echo "Got lock..."
}

function suffix()
{
FORMATTED_DATE=$(date +"$DATE_FORMAT")
echo "$SNAP_SUFFIX.$FORMATTED_DATE"
}

function filter()
{
FORMATTED_DATE=$(date --date="$1" +"$DATE_PREFIX")
echo "$SNAP_SUFFIX.$FORMATTED_DATE"
}

function backup()
{
SOURCE_PATH="$MOUNTS$1"
TARGET_PATH="$BACKUPS$1"
SOURCE_BASE_PATH="$MOUNTS$1$BASE_SUFFIX"
TARGET_BASE_PATH="$BACKUPS$1$BASE_SUFFIX"
TARGET_BASE_DIR="$(dirname $TARGET_BASE_PATH)"
SOURCE_PEND_PATH="$MOUNTS$1$PEND_SUFFIX"
TARGET_PEND_PATH="$BACKUPS$1$PEND_SUFFIX"
if [ -d "$SOURCE_BASE_PATH" ] then
echo "$SOURCE_BASE_PATH found"
else
echo "$SOURCE_BASE_PATH File not found creating snapshot of $SOURCE_PATH to $SOURCE_BASE_PATH"
btrfs subvolume snapshot -r $SOURCE_PATH $SOURCE_BASE_PATH
sync
if [ -d "$TARGET_BASE_PATH" ] then
echo "$TARGET_BASE_PATH found out of sync with source... removing..."
btrfs subvolume delete -c $TARGET_BASE_PATH
sync
fi
fi
if [ -d "$TARGET_BASE_PATH" ] then
echo "$TARGET_BASE_PATH found"
else
echo "$TARGET_BASE_PATH not found. Synching to $TARGET_BASE_DIR"
btrfs send $SOURCE_BASE_PATH | btrfs receive $TARGET_BASE_DIR
sync
fi
if [ -d "$SOURCE_PEND_PATH" ] then
echo "$SOURCE_PEND_PATH found removing..."
btrfs subvolume delete -c $SOURCE_PEND_PATH
sync
fi
btrfs subvolume snapshot -r $SOURCE_PATH $SOURCE_PEND_PATH
sync
if [ -d "$TARGET_PEND_PATH" ] then
echo "$TARGET_PEND_PATH found removing..."
btrfs subvolume delete -c $TARGET_PEND_PATH
sync
fi
echo "Sending $SOURCE_PEND_PATH to $TARGET_PEND_PATH"
btrfs send -p $SOURCE_BASE_PATH $SOURCE_PEND_PATH | btrfs receive $TARGET_BASE_DIR
sync
TARGET_DATE_SUFFIX=$(suffix)
btrfs subvolume snapshot -r $TARGET_PEND_PATH "$TARGET_PATH$TARGET_DATE_SUFFIX"
sync
btrfs subvolume delete -c $SOURCE_BASE_PATH
sync
btrfs subvolume delete -c $TARGET_BASE_PATH
sync
mv $SOURCE_PEND_PATH $SOURCE_BASE_PATH
mv $TARGET_PEND_PATH $TARGET_BASE_PATH
sync
}

function list()
{
LIST_TARGET_BASE_PATH="$BACKUPS$1$BASE_SUFFIX"
LIST_TARGET_BASE_DIR="$(dirname $LIST_TARGET_BASE_PATH)"
LIST_TARGET_BASE_NAME="$(basename -s .$BASE_SUFFIX $LIST_TARGET_BASE_PATH)"
find "$LIST_TARGET_BASE_DIR" -maxdepth 1 -mindepth 1 -type d -printf "%fn" | grep "${LIST_TARGET_BASE_NAME/$BASE_SUFFIX/$SNAP_SUFFIX}.$DATE_REGEX"
}

function remove()
{
REMOVE_TARGET_BASE_PATH="$BACKUPS$1$BASE_SUFFIX"
REMOVE_TARGET_BASE_DIR="$(dirname $REMOVE_TARGET_BASE_PATH)"
btrfs subvolume delete -c $REMOVE_TARGET_BASE_DIR/$2
sync
}

function removeall()
{
DATE_OFFSET="$2"
FILTER="$(filter "$DATE_OFFSET")"
while read -r SNAPSHOT ; do
remove "$1" "$SNAPSHOT"
done < <(list "$1" | grep "$FILTER")

}

(
COMMAND="$1"
shift

case "$COMMAND" in
"--help")
echo "Help"
;;
"suffix")
suffix
;;
"filter")
filter "$1"
;;
"backup")
wait_lock_or_terminate
backup "$1"
;;
"list")
list "$1"
;;
"remove")
wait_lock_or_terminate
remove "$1" "$2"
;;
"removeall")
wait_lock_or_terminate
removeall "$1" "$2"
;;
*)
echo "None.."
;;
esac
) 98>$LOCK_FILE

EOF

ื•ื•ืืก ื˜ื•ื˜ ืขืก ืืคื™ืœื•..?ื›ึผื•ืœืœ ืึท ืกื›ื•ื ืคื•ืŸ ืคึผืฉื•ื˜ ืงืึทืžืึทื ื“ื– ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ BTRFS ืกื ืึทืคึผืฉืึทืฅ ืื•ืŸ ืงืึทืคึผื™ื™ื ื’ ื–ื™ื™ ืฆื• ืืŸ ืื ื“ืขืจ FS ื ื™ืฆืŸ BTRFS ืฉื™ืงืŸ / ื‘ืึทืงื•ืžืขืŸ.

ื“ืขืจ ืขืจืฉื˜ืขืจ ืงืึทื˜ืขืจ ืงืขืŸ ื–ื™ื™ืŸ ืœืขืคื™ืขืจืขืš ืœืึทื ื’, ื•ื•ื™ื™ึทืœ ... ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘, ืึทืœืข ื“ืึทื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืึทืคึผื™ื“. ื•ื•ื™ื™ึทื˜ืขืจ ืœืึธื ื˜ืฉื™ื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ื–ื™ื™ืขืจ ืฉื ืขืœ, ื•ื•ื™ื™ึทืœ ... ื‘ืœื•ื™ื– ืขื ื“ืขืจื•ื ื’ืขืŸ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ืงืึทืคึผื™ื“.

ืืŸ ืื ื“ืขืจ ืฉืจื™ืคื˜ ื•ื•ืึธืก ืžื™ืจ ืฉื˜ืขืœืŸ ืื™ืŸ Cron:

ืขื˜ืœืขื›ืข ืžืขืจ ื‘ืึทืฉ ืงืึธื“#cat >/root/btrfs-backup/cron-daily.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

BACKUP_SCRIPT="$SCRIPT_DIR/btrfs-backup.sh"
RETENTION="-60 day"
$BACKUP_SCRIPT backup root/@
$BACKUP_SCRIPT removeall root/@ "$RETENTION"
$BACKUP_SCRIPT backup root/@home
$BACKUP_SCRIPT removeall root/@home "$RETENTION"
$BACKUP_SCRIPT backup boot/
$BACKUP_SCRIPT removeall boot/ "$RETENTION"
EOF

ื•ื•ืืก ื˜ื•ื˜ ืขืก..?ืงืจื™ื™ื™ืฅ ืื•ืŸ ืกื™ื ื’ืงืจืึทื ื™ื™ื– ื™ื ืงืจืึทืžืขื ื˜ืึทืœ ืกื ืึทืคึผืฉืึทืฅ ืคื•ืŸ ื“ื™ ืœื™ืกื˜ืขื“ BTRFS ื•ื•ืึทืœื™ื•ืžื– ืื•ื™ืฃ ื“ื™ ื‘ืึทืงืึทืคึผ FS. ื ืึธืš ื“ืขื, ืขืก ื“ื™ืœื™ืฅ ืึทืœืข ื‘ื™ืœื“ืขืจ ื‘ืืฉืืคืŸ 60 ื˜ืขื’ ืฆื•ืจื™ืง. ื ืึธืš ืงืึทื˜ืขืจ, ื“ืึทื˜ืขื“ ืกื ืึทืคึผืฉืึทืฅ ืคื•ืŸ ื“ื™ ืœื™ืกื˜ืขื“ ื•ื•ืึทืœื™ื•ืžื– ื•ื•ืขื˜ ื“ืขืจืฉื™ื™ึทื ืขืŸ ืื™ืŸ ื“ื™ /backup/btrfs/back/remote/ ืกื•ื‘ื“ื™ืจืขืงื˜ืึธืจื™ืขืก.

ื–ืืœ ืก ื’ืขื‘ืŸ ื“ื™ ืงืึธื“ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืจืขื›ื˜:

#chmod +x /root/btrfs-backup/cron-daily.sh
#chmod +x /root/btrfs-backup/btrfs-backup.sh

ื–ืืœ ืก ื˜ืฉืขืง ืขืก ืื•ืŸ ืฉื˜ืขืœืŸ ืขืก ืื™ืŸ ื“ื™ ืงืจืึทืŸ:

#/usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/btrfs-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t btrfs-backup
#cat /var/log/syslog | grep btrfs-backup
#crontab -e
0 2 * * * /usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/btrfs-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t btrfs-backup

LVM ื“ื™ืŸ ื‘ืึทืงืึทืคึผ

ื–ืืœ ืก ืžืึทื›ืŸ ืึท ื“ื™ืŸ ื‘ืขืงืŸ ืื•ื™ืฃ ื“ื™ ื‘ืึทืงืึทืคึผ ืžื™ื˜ืœ:

#lvcreate -L 274877906944B --poolmetadataspare y --poolmetadatasize 4294967296B --chunksize 64k -Z y -T backup/thin-pool

ืœืึธืžื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ ddrescue, ื•ื•ื™ื™ึทืœ ... ืกืงืจื™ืคึผืก ื•ื•ืขื˜ ื ื•ืฆืŸ ื“ืขื ื’ืขืฆื™ื™ึทื’:

#apt-get install gddrescue

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืคึฟืึทืจ ืกืงืจื™ืคึผืก:

#mkdir /root/lvm-thin-backup

ืœืึธืžื™ืจ ื ืึธื›ืžืึทื›ืŸ ื“ื™ ืกืงืจื™ืคึผืก:

ืืกืืš ื‘ื•ืฉื” ืื™ื ืขื•ื•ื™ื™ื ื™ื’...#cat >/root/lvm-thin-backup/lvm-thin-backup.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

LOCK_FILE="/dev/shm/$SCRIPT_NAME.lock"
DATE_PREFIX='%Y-%m-%d'
DATE_FORMAT=$DATE_PREFIX'-%H-%M-%S'
DATE_REGEX='[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
BASE_SUFFIX=".base"
PEND_SUFFIX=".pend"
SNAP_SUFFIX=".snap"
BACKUPS="backup"
BACKUPS_POOL="thin-pool"

export LVM_SUPPRESS_FD_WARNINGS=1

function terminate ()
{
echo "$1" >&2
exit 1
}

function wait_lock()
{
flock 98
}

function wait_lock_or_terminate()
{
echo "Wating for lock..."
wait_lock || terminate "Failed to get lock. Exiting..."
echo "Got lock..."
}

function suffix()
{
FORMATTED_DATE=$(date +"$DATE_FORMAT")
echo "$SNAP_SUFFIX.$FORMATTED_DATE"
}

function filter()
{
FORMATTED_DATE=$(date --date="$1" +"$DATE_PREFIX")
echo "$SNAP_SUFFIX.$FORMATTED_DATE"
}

function read_thin_id {
lvs --rows --reportformat basic --quiet -othin_id "$1/$2" | awk '{print $2}'
}

function read_pool_lv {
lvs --rows --reportformat basic --quiet -opool_lv "$1/$2" | awk '{print $2}'
}

function read_lv_dm_path {
lvs --rows --reportformat basic --quiet -olv_dm_path "$1/$2" | awk '{print $2}'
}

function read_lv_active {
lvs --rows --reportformat basic --quiet -olv_active "$1/$2" | awk '{print $2}'
}

function read_lv_chunk_size {
lvs --rows --reportformat basic --quiet --units b --nosuffix -ochunk_size "$1/$2" | awk '{print $2}'
}

function read_lv_size {
lvs --rows --reportformat basic --quiet --units b --nosuffix -olv_size "$1/$2" | awk '{print $2}'
}

function activate_volume {
lvchange -ay -Ky "$1/$2"
}

function deactivate_volume {
lvchange -an "$1/$2"
}

function read_thin_metadata_snap {
dmsetup status "$1" | awk '{print $7}'
}

function thindiff()
{
DIFF_VG="$1"
DIFF_SOURCE="$2"
DIFF_TARGET="$3"
DIFF_SOURCE_POOL=$(read_pool_lv $DIFF_VG $DIFF_SOURCE)
DIFF_TARGET_POOL=$(read_pool_lv $DIFF_VG $DIFF_TARGET)

if [ "$DIFF_SOURCE_POOL" == "" ] then
(>&2 echo "Source LV is not thin.")
exit 1
fi

if [ "$DIFF_TARGET_POOL" == "" ] then
(>&2 echo "Target LV is not thin.")
exit 1
fi

if [ "$DIFF_SOURCE_POOL" != "$DIFF_TARGET_POOL" ] then
(>&2 echo "Source and target LVs belong to different thin pools.")
exit 1
fi

DIFF_POOL_PATH=$(read_lv_dm_path $DIFF_VG $DIFF_SOURCE_POOL)
DIFF_SOURCE_ID=$(read_thin_id $DIFF_VG $DIFF_SOURCE)
DIFF_TARGET_ID=$(read_thin_id $DIFF_VG $DIFF_TARGET)
DIFF_POOL_PATH_TPOOL="$DIFF_POOL_PATH-tpool"
DIFF_POOL_PATH_TMETA="$DIFF_POOL_PATH"_tmeta
DIFF_POOL_METADATA_SNAP=$(read_thin_metadata_snap $DIFF_POOL_PATH_TPOOL)

if [ "$DIFF_POOL_METADATA_SNAP" != "-" ] then
(>&2 echo "Thin pool metadata snapshot already exist. Assuming stale one. Will release metadata snapshot in 5 seconds.")
sleep 5
dmsetup message $DIFF_POOL_PATH_TPOOL 0 release_metadata_snap
fi

dmsetup message $DIFF_POOL_PATH_TPOOL 0 reserve_metadata_snap
DIFF_POOL_METADATA_SNAP=$(read_thin_metadata_snap $DIFF_POOL_PATH_TPOOL)

if [ "$DIFF_POOL_METADATA_SNAP" == "-" ] then
(>&2 echo "Failed to create thin pool metadata snapshot.")
exit 1
fi

#We keep output in variable because metadata snapshot need to be released early.
DIFF_DATA=$(thin_delta -m$DIFF_POOL_METADATA_SNAP --snap1 $DIFF_SOURCE_ID --snap2 $DIFF_TARGET_ID $DIFF_POOL_PATH_TMETA)

dmsetup message $DIFF_POOL_PATH_TPOOL 0 release_metadata_snap

echo $"$DIFF_DATA" | grep -E 'different|left_only|right_only' | sed 's/</"/g' | sed 's/ /"/g' | awk -F'"' '{print $6 "t" $8 "t" $11}' | sed 's/different/copy/g' | sed 's/left_only/copy/g' | sed 's/right_only/discard/g'

}

function thinsync()
{
SYNC_VG="$1"
SYNC_PEND="$2"
SYNC_BASE="$3"
SYNC_TARGET="$4"
SYNC_PEND_POOL=$(read_pool_lv $SYNC_VG $SYNC_PEND)
SYNC_BLOCK_SIZE=$(read_lv_chunk_size $SYNC_VG $SYNC_PEND_POOL)
SYNC_PEND_PATH=$(read_lv_dm_path $SYNC_VG $SYNC_PEND)

activate_volume $SYNC_VG $SYNC_PEND

while read -r SYNC_ACTION SYNC_OFFSET SYNC_LENGTH ; do
SYNC_OFFSET_BYTES=$((SYNC_OFFSET * SYNC_BLOCK_SIZE))
SYNC_LENGTH_BYTES=$((SYNC_LENGTH * SYNC_BLOCK_SIZE))
if [ "$SYNC_ACTION" == "copy" ] then
ddrescue --quiet --force --input-position=$SYNC_OFFSET_BYTES --output-position=$SYNC_OFFSET_BYTES --size=$SYNC_LENGTH_BYTES "$SYNC_PEND_PATH" "$SYNC_TARGET"
fi

if [ "$SYNC_ACTION" == "discard" ] then
blkdiscard -o $SYNC_OFFSET_BYTES -l $SYNC_LENGTH_BYTES "$SYNC_TARGET"
fi
done < <(thindiff "$SYNC_VG" "$SYNC_PEND" "$SYNC_BASE")
}

function discard_volume()
{
DISCARD_VG="$1"
DISCARD_LV="$2"
DISCARD_LV_PATH=$(read_lv_dm_path "$DISCARD_VG" "$DISCARD_LV")
if [ "$DISCARD_LV_PATH" != "" ] then
echo "$DISCARD_LV_PATH found"
else
echo "$DISCARD_LV not found in $DISCARD_VG"
exit 1
fi
DISCARD_LV_POOL=$(read_pool_lv $DISCARD_VG $DISCARD_LV)
DISCARD_LV_SIZE=$(read_lv_size "$DISCARD_VG" "$DISCARD_LV")
lvremove -y --quiet "$DISCARD_LV_PATH" || exit 1
lvcreate --thin-pool "$DISCARD_LV_POOL" -V "$DISCARD_LV_SIZE"B --name "$DISCARD_LV" "$DISCARD_VG" || exit 1
}

function backup()
{
SOURCE_VG="$1"
SOURCE_LV="$2"
TARGET_VG="$BACKUPS"
TARGET_LV="$SOURCE_VG-$SOURCE_LV"
SOURCE_BASE_LV="$SOURCE_LV$BASE_SUFFIX"
TARGET_BASE_LV="$TARGET_LV$BASE_SUFFIX"
SOURCE_PEND_LV="$SOURCE_LV$PEND_SUFFIX"
TARGET_PEND_LV="$TARGET_LV$PEND_SUFFIX"
SOURCE_BASE_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_BASE_LV")
SOURCE_PEND_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_PEND_LV")
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
TARGET_PEND_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_PEND_LV")

if [ "$SOURCE_BASE_LV_PATH" != "" ] then
echo "$SOURCE_BASE_LV_PATH found"
else
echo "Source base not found creating snapshot of $SOURCE_VG/$SOURCE_LV to $SOURCE_VG/$SOURCE_BASE_LV"
lvcreate --quiet --snapshot --name "$SOURCE_BASE_LV" "$SOURCE_VG/$SOURCE_LV" || exit 1
SOURCE_BASE_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_BASE_LV")
activate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
echo "Discarding $SOURCE_BASE_LV_PATH as we need to bootstrap."
SOURCE_BASE_POOL=$(read_pool_lv $SOURCE_VG $SOURCE_BASE_LV)
SOURCE_BASE_CHUNK_SIZE=$(read_lv_chunk_size $SOURCE_VG $SOURCE_BASE_POOL)
discard_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
sync
if [ "$TARGET_BASE_LV_PATH" != "" ] then
echo "$TARGET_BASE_LV_PATH found out of sync with source... removing..."
lvremove -y --quiet $TARGET_BASE_LV_PATH || exit 1
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
sync
fi
fi
SOURCE_BASE_SIZE=$(read_lv_size "$SOURCE_VG" "$SOURCE_BASE_LV")
if [ "$TARGET_BASE_LV_PATH" != "" ] then
echo "$TARGET_BASE_LV_PATH found"
else
echo "$TARGET_VG/$TARGET_LV not found. Creating empty volume."
lvcreate --thin-pool "$BACKUPS_POOL" -V "$SOURCE_BASE_SIZE"B --name "$TARGET_BASE_LV" "$TARGET_VG" || exit 1
echo "Have to rebootstrap. Discarding source at $SOURCE_BASE_LV_PATH"
activate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
SOURCE_BASE_POOL=$(read_pool_lv $SOURCE_VG $SOURCE_BASE_LV)
SOURCE_BASE_CHUNK_SIZE=$(read_lv_chunk_size $SOURCE_VG $SOURCE_BASE_POOL)
discard_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
TARGET_BASE_POOL=$(read_pool_lv $TARGET_VG $TARGET_BASE_LV)
TARGET_BASE_CHUNK_SIZE=$(read_lv_chunk_size $TARGET_VG $TARGET_BASE_POOL)
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
echo "Discarding target at $TARGET_BASE_LV_PATH"
discard_volume "$TARGET_VG" "$TARGET_BASE_LV"
sync
fi
if [ "$SOURCE_PEND_LV_PATH" != "" ] then
echo "$SOURCE_PEND_LV_PATH found removing..."
lvremove -y --quiet "$SOURCE_PEND_LV_PATH" || exit 1
sync
fi
lvcreate --quiet --snapshot --name "$SOURCE_PEND_LV" "$SOURCE_VG/$SOURCE_LV" || exit 1
SOURCE_PEND_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_PEND_LV")
sync
if [ "$TARGET_PEND_LV_PATH" != "" ] then
echo "$TARGET_PEND_LV_PATH found removing..."
lvremove -y --quiet $TARGET_PEND_LV_PATH
sync
fi
lvcreate --quiet --snapshot --name "$TARGET_PEND_LV" "$TARGET_VG/$TARGET_BASE_LV" || exit 1
TARGET_PEND_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_PEND_LV")
SOURCE_PEND_LV_SIZE=$(read_lv_size "$SOURCE_VG" "$SOURCE_PEND_LV")
lvresize -L "$SOURCE_PEND_LV_SIZE"B "$TARGET_PEND_LV_PATH"
activate_volume "$TARGET_VG" "$TARGET_PEND_LV"
echo "Synching $SOURCE_PEND_LV_PATH to $TARGET_PEND_LV_PATH"
thinsync "$SOURCE_VG" "$SOURCE_PEND_LV" "$SOURCE_BASE_LV" "$TARGET_PEND_LV_PATH" || exit 1
sync

TARGET_DATE_SUFFIX=$(suffix)
lvcreate --quiet --snapshot --name "$TARGET_LV$TARGET_DATE_SUFFIX" "$TARGET_VG/$TARGET_PEND_LV" || exit 1
sync
lvremove --quiet -y "$SOURCE_BASE_LV_PATH" || exit 1
sync
lvremove --quiet -y "$TARGET_BASE_LV_PATH" || exit 1
sync
lvrename -y "$SOURCE_VG/$SOURCE_PEND_LV" "$SOURCE_BASE_LV" || exit 1
lvrename -y "$TARGET_VG/$TARGET_PEND_LV" "$TARGET_BASE_LV" || exit 1
sync
deactivate_volume "$TARGET_VG" "$TARGET_BASE_LV"
deactivate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
}

function verify()
{
SOURCE_VG="$1"
SOURCE_LV="$2"
TARGET_VG="$BACKUPS"
TARGET_LV="$SOURCE_VG-$SOURCE_LV"
SOURCE_BASE_LV="$SOURCE_LV$BASE_SUFFIX"
TARGET_BASE_LV="$TARGET_LV$BASE_SUFFIX"
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
SOURCE_BASE_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_BASE_LV")

if [ "$SOURCE_BASE_LV_PATH" != "" ] then
echo "$SOURCE_BASE_LV_PATH found"
else
echo "$SOURCE_BASE_LV_PATH not found"
exit 1
fi
if [ "$TARGET_BASE_LV_PATH" != "" ] then
echo "$TARGET_BASE_LV_PATH found"
else
echo "$TARGET_BASE_LV_PATH not found"
exit 1
fi
activate_volume "$TARGET_VG" "$TARGET_BASE_LV"
activate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
echo Comparing "$SOURCE_BASE_LV_PATH" with "$TARGET_BASE_LV_PATH"
cmp "$SOURCE_BASE_LV_PATH" "$TARGET_BASE_LV_PATH"
echo Done...
deactivate_volume "$TARGET_VG" "$TARGET_BASE_LV"
deactivate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
}

function resync()
{
SOURCE_VG="$1"
SOURCE_LV="$2"
TARGET_VG="$BACKUPS"
TARGET_LV="$SOURCE_VG-$SOURCE_LV"
SOURCE_BASE_LV="$SOURCE_LV$BASE_SUFFIX"
TARGET_BASE_LV="$TARGET_LV$BASE_SUFFIX"
TARGET_BASE_LV_PATH=$(read_lv_dm_path "$TARGET_VG" "$TARGET_BASE_LV")
SOURCE_BASE_LV_PATH=$(read_lv_dm_path "$SOURCE_VG" "$SOURCE_BASE_LV")

if [ "$SOURCE_BASE_LV_PATH" != "" ] then
echo "$SOURCE_BASE_LV_PATH found"
else
echo "$SOURCE_BASE_LV_PATH not found"
exit 1
fi
if [ "$TARGET_BASE_LV_PATH" != "" ] then
echo "$TARGET_BASE_LV_PATH found"
else
echo "$TARGET_BASE_LV_PATH not found"
exit 1
fi
activate_volume "$TARGET_VG" "$TARGET_BASE_LV"
activate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
SOURCE_BASE_POOL=$(read_pool_lv $SOURCE_VG $SOURCE_BASE_LV)
SYNC_BLOCK_SIZE=$(read_lv_chunk_size $SOURCE_VG $SOURCE_BASE_POOL)

echo Syncronizing "$SOURCE_BASE_LV_PATH" to "$TARGET_BASE_LV_PATH"

CMP_OFFSET=0
while [[ "$CMP_OFFSET" != "" ]] ; do
CMP_MISMATCH=$(cmp -i "$CMP_OFFSET" "$SOURCE_BASE_LV_PATH" "$TARGET_BASE_LV_PATH" | grep differ | awk '{print $5}' | sed 's/,//g' )
if [[ "$CMP_MISMATCH" != "" ]] ; then
CMP_OFFSET=$(( CMP_MISMATCH + CMP_OFFSET ))
SYNC_OFFSET_BYTES=$(( ( CMP_OFFSET / SYNC_BLOCK_SIZE ) * SYNC_BLOCK_SIZE ))
SYNC_LENGTH_BYTES=$(( SYNC_BLOCK_SIZE ))
echo "Synching $SYNC_LENGTH_BYTES bytes at $SYNC_OFFSET_BYTES from $SOURCE_BASE_LV_PATH to $TARGET_BASE_LV_PATH"
ddrescue --quiet --force --input-position=$SYNC_OFFSET_BYTES --output-position=$SYNC_OFFSET_BYTES --size=$SYNC_LENGTH_BYTES "$SOURCE_BASE_LV_PATH" "$TARGET_BASE_LV_PATH"
else
CMP_OFFSET=""
fi
done
echo Done...
deactivate_volume "$TARGET_VG" "$TARGET_BASE_LV"
deactivate_volume "$SOURCE_VG" "$SOURCE_BASE_LV"
}

function list()
{
LIST_SOURCE_VG="$1"
LIST_SOURCE_LV="$2"
LIST_TARGET_VG="$BACKUPS"
LIST_TARGET_LV="$LIST_SOURCE_VG-$LIST_SOURCE_LV"
LIST_TARGET_BASE_LV="$LIST_TARGET_LV$SNAP_SUFFIX"
lvs -olv_name | grep "$LIST_TARGET_BASE_LV.$DATE_REGEX"
}

function remove()
{
REMOVE_TARGET_VG="$BACKUPS"
REMOVE_TARGET_LV="$1"
lvremove -y "$REMOVE_TARGET_VG/$REMOVE_TARGET_LV"
sync
}

function removeall()
{
DATE_OFFSET="$3"
FILTER="$(filter "$DATE_OFFSET")"
while read -r SNAPSHOT ; do
remove "$SNAPSHOT"
done < <(list "$1" "$2" | grep "$FILTER")

}

(
COMMAND="$1"
shift

case "$COMMAND" in
"--help")
echo "Help"
;;
"suffix")
suffix
;;
"filter")
filter "$1"
;;
"backup")
wait_lock_or_terminate
backup "$1" "$2"
;;
"list")
list "$1" "$2"
;;
"thindiff")
thindiff "$1" "$2" "$3"
;;
"thinsync")
thinsync "$1" "$2" "$3" "$4"
;;
"verify")
wait_lock_or_terminate
verify "$1" "$2"
;;
"resync")
wait_lock_or_terminate
resync "$1" "$2"
;;
"remove")
wait_lock_or_terminate
remove "$1"
;;
"removeall")
wait_lock_or_terminate
removeall "$1" "$2" "$3"
;;
*)
echo "None.."
;;
esac
) 98>$LOCK_FILE

EOF

ื•ื•ืึธืก ื˜ื•ื˜ ืขืก ...?ื›ึผื•ืœืœ ืึท ืกื›ื•ื ืคื•ืŸ ืงืึทืžืึทื ื“ื– ืคึฟืึทืจ ืžืึทื ื™ืคึผื™ืึทืœื™ื™ื˜ื™ื ื’ ื“ื™ืŸ ืกื ืึทืคึผืฉืึทืฅ ืื•ืŸ ืกื™ื ื’ืงืจืึทื ื™ื™ื– ื“ื™ ื—ื™ืœื•ืง ืฆื•ื•ื™ืฉืŸ ืฆื•ื•ื™ื™ ื“ื™ืŸ ืกื ืึทืคึผืฉืึทืฅ ื‘ืืงื•ืžืขืŸ ื“ื•ืจืš thin_delta ืฆื• ืืŸ ืื ื“ืขืจ ื‘ืœืึธืง ืžื™ื˜ืœ ื ื™ืฆืŸ ddrescue ืื•ืŸ blkdiscard.

ืืŸ ืื ื“ืขืจ ืฉืจื™ืคื˜ ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ืฉื˜ืขืœืŸ ืื™ืŸ Cron:

ืึท ื‘ื™ืกืœ ืžืขืจ ื‘ืึทืฉ#cat >/root/lvm-thin-backup/cron-daily.sh << EOF
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

SCRIPT_FILE="$(realpath $0)"
SCRIPT_DIR="$(dirname $SCRIPT_FILE)"
SCRIPT_NAME="$(basename -s .sh $SCRIPT_FILE)"

BACKUP_SCRIPT="$SCRIPT_DIR/lvm-thin-backup.sh"
RETENTION="-60 days"

$BACKUP_SCRIPT backup images linux-dev
$BACKUP_SCRIPT backup images win8
$BACKUP_SCRIPT backup images win8-data
#etc

$BACKUP_SCRIPT removeall images linux-dev "$RETENTION"
$BACKUP_SCRIPT removeall images win8 "$RETENTION"
$BACKUP_SCRIPT removeall images win8-data "$RETENTION"
#etc

EOF

ื•ื•ืึธืก ื˜ื•ื˜ ืขืก ...?ื ื™ืฆื˜ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืฉืจื™ืคื˜ ืฆื• ืฉืึทืคึฟืŸ ืื•ืŸ ืกื™ื ื’ืงืจืึทื ื™ื™ื– ื‘ืึทืงืึทืคึผืก ืคื•ืŸ ื“ื™ ืœื™ืกื˜ืขื“ ื“ื™ืŸ ื•ื•ืึทืœื™ื•ืžื–. ื“ืขืจ ืฉืจื™ืคื˜ ื•ื•ืขื˜ ืœืึธื–ืŸ ื™ื ืึทืงื˜ื™ื•ื• ืกื ืึทืคึผืฉืึทืฅ ืคื•ืŸ ื“ื™ ืœื™ืกื˜ืขื“ ื•ื•ืึทืœื™ื•ืžื–, ื•ื•ืึธืก ื–ืขื ืขืŸ ื“ืืจืฃ ืฆื• ืฉืคึผื•ืจ ืขื ื“ืขืจื•ื ื’ืขืŸ ื–ื™ื ื˜ ื“ื™ ืœืขืฆื˜ืข ืกื™ื ื’ืงืจืึทื ืึทื–ื™ื™ืฉืึทืŸ.

ื“ืขืจ ืฉืจื™ืคื˜ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืขื“ื™ื˜ื™ื“, ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ื“ื™ืŸ ื•ื•ืึทืœื™ื•ืžื– ืคึฟืึทืจ ื•ื•ืึธืก ื‘ืึทืงืึทืคึผ ืงืืคื™ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ื’ืขืžืื›ื˜. ื“ื™ ื’ืขื’ืขื‘ืŸ ื ืขืžืขืŸ ื–ืขื ืขืŸ ื‘ืœื•ื™ื– ืคึฟืึทืจ ื™ืœืึทืกื˜ืจืึทื˜ื™ื•ื• ืฆื•ื•ืขืงืŸ. ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœื˜, ืื™ืจ ืงืขื ืขืŸ ืฉืจื™ื™ึทื‘ืŸ ืึท ืฉืจื™ืคื˜ ื•ื•ืึธืก ื•ื•ืขื˜ ืกื™ื ื’ืงืจืึทื ื™ื™ื– ืึทืœืข ื•ื•ืึทืœื™ื•ืžื–.

ืœืืžื™ืจ ื’ืขื‘ืŸ ื“ื™ ืจืขื›ื˜:

#chmod +x /root/lvm-thin-backup/cron-daily.sh
#chmod +x /root/lvm-thin-backup/lvm-thin-backup.sh

ื–ืืœ ืก ื˜ืฉืขืง ืขืก ืื•ืŸ ืฉื˜ืขืœืŸ ืขืก ืื™ืŸ ื“ื™ ืงืจืึทืŸ:

#/usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/lvm-thin-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t lvm-thin-backup
#cat /var/log/syslog | grep lvm-thin-backup
#crontab -e
0 3 * * * /usr/bin/nice -n 19 /usr/bin/ionice -c 3 /root/lvm-thin-backup/cron-daily.sh 2>&1 | /usr/bin/logger -t lvm-thin-backup

ื“ืขืจ ืขืจืฉื˜ืขืจ ืงืึทื˜ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœืึทื ื’, ื•ื•ื™ื™ึทืœ ... ื“ื™ืŸ ื•ื•ืึทืœื™ื•ืžื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืึธืจ ืกื™ื ื’ืงืจืึทื ื™ื™ื–ื“ ื“ื•ืจืš ืงืึทืคึผื™ื™ื ื’ ืึทืœืข ื’ืขื•ื•ื™ื™ื ื˜ ืคึผืœืึทืฅ. ื“ืึทื ืง ืฆื• LVM ื“ื™ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท, ืžื™ืจ ื•ื•ื™ืกืŸ ื•ื•ืึธืก ื‘ืœืึทืงืก ื–ืขื ืขืŸ ืคืืงื˜ื™ืฉ ืื™ืŸ ื ื•ืฆืŸ, ืึทื–ื•ื™ ื‘ืœื•ื™ื– ืึทืงืฉืœื™ ื’ืขื•ื•ื™ื™ื ื˜ ื“ื™ืŸ ื‘ืึทื ื“ ื‘ืœืึทืงืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืึทืคึผื™ื“.

ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜ ืจืึทื ื– ื•ื•ืขื˜ ื ืึธื›ืžืึทื›ืŸ ื“ื™ ื“ืึทื˜ืŸ ื™ื ืงืจืึทืžืขื ื˜ืึทืœื™ ื“ืึทื ืง ืฆื• ื˜ื•ื™ืฉืŸ ื˜ืจืึทืงื™ื ื’ ื“ื•ืจืš LVM ื“ื™ืŸ ืžืขื˜ืึทื“ืึทื˜ืึท.

ืœืืžื™ืจ ื–ืขืŸ ื•ื•ืืก ืื™ื– ื’ืขืฉืขืŸ:

#time /root/btrfs-backup/cron-daily.sh
real 0m2,967s
user 0m0,225s
sys 0m0,353s

#time /root/lvm-thin-backup/cron-daily.sh
real 1m2,710s
user 0m12,721s
sys 0m6,671s

#ls -al /backup/btrfs/back/remote/*
/backup/btrfs/back/remote/boot:
total 0
drwxr-xr-x 1 root root 1260 ะผะฐั€ 26 09:11 .
drwxr-xr-x 1 root root 16 ะผะฐั€ 6 09:30 ..
drwxr-xr-x 1 root root 322 ะผะฐั€ 26 02:00 .@base
drwxr-xr-x 1 root root 516 ะผะฐั€ 6 09:39 [email protected]
drwxr-xr-x 1 root root 516 ะผะฐั€ 6 09:39 [email protected]
...
/backup/btrfs/back/remote/root:
total 0
drwxr-xr-x 1 root root 2820 ะผะฐั€ 26 09:11 .
drwxr-xr-x 1 root root 16 ะผะฐั€ 6 09:30 ..
drwxr-xr-x 1 root root 240 ะผะฐั€ 26 09:11 @.@base
drwxr-xr-x 1 root root 22 ะผะฐั€ 26 09:11 @home.@base
drwxr-xr-x 1 root root 22 ะผะฐั€ 6 09:39 @[email protected]
drwxr-xr-x 1 root root 22 ะผะฐั€ 6 09:39 @[email protected]
...
drwxr-xr-x 1 root root 240 ะผะฐั€ 6 09:39 @[email protected]
drwxr-xr-x 1 root root 240 ะผะฐั€ 6 09:39 @[email protected]
...

#lvs -olv_name,lv_size images && lvs -olv_name,lv_size backup
LV LSize
linux-dev 128,00g
linux-dev.base 128,00g
thin-pool 1,38t
win8 128,00g
win8-data 2,00t
win8-data.base 2,00t
win8.base 128,00g
LV LSize
backup 256,00g
images-linux-dev.base 128,00g
images-linux-dev.snap.2020-03-08-10-09-11 128,00g
images-linux-dev.snap.2020-03-08-10-09-25 128,00g
...
images-win8-data.base 2,00t
images-win8-data.snap.2020-03-16-14-11-55 2,00t
images-win8-data.snap.2020-03-16-14-19-50 2,00t
...
images-win8.base 128,00g
images-win8.snap.2020-03-17-04-51-46 128,00g
images-win8.snap.2020-03-18-03-02-49 128,00g
...
thin-pool <2,09t

ื•ื•ืึธืก ื˜ื•ื˜ ื“ืึธืก ื”ืึธื‘ืŸ ืฆื• ื˜ืึธืŸ ืžื™ื˜ ื ืขืกื˜ื™ื ื’ ื“ืึทืœื–?

ืจื•ื‘ึฟ ืžืกืชึผืžื, ื•ื•ื™ื™ึทืœ LVM LV ืœืึทื“ื–ืฉื™ืงืึทืœ ื•ื•ืึทืœื™ื•ืžื– ืงืขื ืขืŸ ื–ื™ื™ืŸ LVM PV ื’ืฉืžื™ื•ืช ื•ื•ืึทืœื™ื•ืžื– ืคึฟืึทืจ ืื ื“ืขืจืข VGs. LVM ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจืขืงื•ืจืกื™ื•ื•, ื•ื•ื™ ื ืขืกื˜ื™ื ื’ ื“ืึทืœื–. ื“ืึธืก ื’ื™ื˜ LVM ืขืงืกื˜ืจืขื ื‘ื™ื™ื’ื™ืงื™ื™ื˜.

ืคึผืก

ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืึทืจื˜ื™ืงืœ, ืžื™ืจ ื•ื•ืขืœืŸ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื ื•ืฆืŸ ืขื˜ืœืขื›ืข ืขื ืœืขืš ืจื™ืจืขื•ื•ื“ื™ืง ืกื˜ืึธืจื™ื“ื–ืฉ ืกื™ืกื˜ืขืžืขืŸ / KVM ื•ื•ื™ ื“ื™ ื™ืงืขืจ ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ื’ืขืึธ-ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ / ื•ื•ื ืงื ื•ื™ืœ ืžื™ื˜ ื™ื‘ืขืจื™ืงื™ื™ึทื˜ ืื•ื™ืฃ ืขื˜ืœืขื›ืข ืงืึธื ื˜ื™ื ืขื ืฅ ื ื™ืฆืŸ ื”ื™ื™ื ื“ืขืกืงื˜ืึทืคึผืก, ื“ื™ ื”ื™ื™ื ืื™ื ื˜ืขืจื ืขื˜ ืื•ืŸ P2P ื ืขื˜ื•ื•ืึธืจืงืก.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’