ืฉึธืืืึนื.
ืืจืฆืื ื ืืืืืง ืขื ืืงืืืื ืืช ืื ืืกืืื ืืืขืฉื ืฉืื ืืื ืืืช ืืขืจืืช ืืืกืื ื ืชืื ืื ืขืืืจ 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 ื-BIOS.
- ืฉืืืืฉ ืืืืืื LVM ืื-LVM ืืง.
- ืฉืืืืฉ ืืชืืื ืืช BTRFS ืืฉืื/ืงืื ืืืืืื.
- ืฉืืืืฉ ืืฆืืืืื ืืฆื ืืงืื ืฉื LVM ื- thin_delta ืขืืืจ ืืืืืืื ืืกืื ืื BTRFS.
ืื ืืชื ืืขืื ืืื, ืื ื ืจืื ืืชืื.
ืืฆืืจื
ืืืืืจ ืืื ื ื ืืฉื ืืืืจืืืช ืืืฉืื ืืืฉืืืืช ืฉื ืฉืืืืฉ ืื ืื ืฉืืืืฉ ืืืืืจืื/ืืืืืืืช/ืงืื/ืืืคืื/ื ืชืื ืื ืืืืืจ ืื. ืขื ืืื ืงืจืืื ืื ืฉืืืืฉ ืืืืืจ ืื ืืื ืืจื ืฉืืื, ืืชื ืืืงื ืืืจืืืช ืขื ืื ืืืฉืืืืช ืฉื ืคืขืืืืช ืืื. ืืืฉืืืืช ืืืคืฉืจืืืช ืืืืืืช:
- ืืื ื ื SSD NVMe ืืืืื ืื.
- ืื ืืฆื ืืืืืืื ืืฉืื ืืงืืื ืืืฉื ืืืื ื ื SSD.
- ืืืืื ืืืืื ืฉื ืื ืื ืชืื ืื ืืื ืืืื ื ืื, ืืืื ืขืืชืงื ืืืืื.
- ืืืืจืช ืืืฉื ืคืืืื.
- ืืืืื ืืื, ืขืฆืืื ืืืกืฃ.
- ืื ืืฉืืืืช ืืืจืืช ืฉืืื ื ืืคืืจืืืช ืืขืื.
ืืจืื
ืืืืื ืื ืืื:
ืืื ืื ืืกืืืืืช 2013 ืขื ืขืจืืช ืฉืืืื Z87, ืฉืื ืขื Intel Core i7 / Haswell.
- ืืขืื 4 ืืืืืช, 8 ืืืืื
- ืืืืจืื RAM ืฉื 32 GB DDR3
- 1 x 16 ืื 2 x 8 PCIe 3.0
- 1 x 4 + 1 x 1 PCIe 2.0
- 6 x 6 GBps ืืืืจื SATA 3
ืืชืื SAS LSI SAS9211-8I ืืืื ืืืฆื IT / HBA. ืงืืฉืื ืืชืืืืช ื-RAID ืืืืืคื ืืืืื ื ืืงืืฉืื HBA ืืื:
- ืืชื ืืืื ืืืจืืง ืืช ืืืชืื ืืื ืืื ืขืช ืืืืืืืฃ ืืืชื ืืื ืืื ืืืจ ืฉื ืชืงืืช ืื.
- TRIM/Discard ืขืื ืืจืืื ืขื ืืืกืงืื, ืื... ืืงืืฉืื ืฉื RAID ืคืงืืืืช ืืื ืืื ื ื ืชืืืืช ืืื, ืื-HBA, ืืืืคื ืืืื, ืื ืืืคืช ืืืื ืคืงืืืืช ืืฉืืืจืืช ืืจื ืืืืืืืืก.
ืืื ื ืื ืงืฉืืืื - 8 ืืชืืืืช ืฉื HGST Travelstar 7K1000 ืขื ืงืืืืืช ืฉื 1 TB ืืคืืจืื 2.5, ืืื ืืืืฉืืื ื ืืืืื. ืืื ื ืื ืืื ืืื ืืขืืจ ืืืขืจื RAID 6. ืืืื ืืื ืฉืืืืฉ ืื ืืืขืจืืช ืืืืฉื. ืืืืกืื ืืืืืืื ืืงืืืืื.
ื ืืกืฃ ื ืืกืฃ:
6 ืืืงืื SATA SSD ืืื Samsung 860 QVO 2TB. ืืื ื ื SSD ืืื ืืจืฉื ื ืคื ืืืื, ื ืืืืืช ืฉื ืืืืื SLC, ืืืื ืืช ืืืืืจ ื ืืื ืืื ืจืฆืืืื. ื ืืจืฉื ืชืืืื ื-discard/zero, ืืฉืจ ื ืืืงืช ืขื ืืื ืืฉืืจื ื-dmesg:
kernel: ata1.00: Enabling discard_zeroes_data
2 ืืชืืืืช ืฉื NVMe SSD ืืื Samsung SSD 970 EVO 500GB.
ืขืืืจ SSDs ืืื, ืืืืจืืช ืงืจืืื/ืืชืืื ืืงืจืืืช ืืืืืืช ืืืฉืืืื ืืฆืจืืื ืฉืื ืืฉืืืื. ืจืืืืืืจ ืขืืืจื. ืืืืจื. ืืืืื. ืืืจืช, ืืืื ืื ืืืชื ืขื ืฉืื ืคืจืืืื ืืืืื ืกื ืืจืื ื-RAID ืืจืืฉืื.
ืืชืื StarTech PEX8M2E2 ืขืืืจ 2 x NVMe SSD ืืืชืงื ืืืจืืฅ PCIe 3.0 8x. ืื, ืฉืื, ืืื ืจืง HBA, ืืื ืขืืืจ NVMe. ืืื ืฉืื ื ืืชืืืื ืืืืื ืืื ืฉืืื ืืื ื ืืืจืฉ ืชืืืื ืืคืืฆืื PCIe ืืืื ืืื ืืฉื ื ืืืืืชื ืฉื ืืชื PCIe ืืืื ื. ืื ืืขืืื ืืคืืื ืืืขืจืืช ืืขืชืืงื ืืืืชืจ ืขื PCIe, ืื ืื ืื ืืจืืฅ X1 PCIe 1.0. ืืืืคื ืืืขื, ืืืืืจืืช ืืืชืืืื. ืืื ืฉื RAIDs. ืืื BIOS ืืืื ื ืืืื. ืื, ืืืขืจืืช ืฉืื ืื ืชืืื ืืืืคื ืงืกืื ืืืชืื ืขื NVMe, ืืคืืืช ืืขืฉืืช NVMe RAID ืืืืืช ืืืืฉืืจ ืืื.
ืจืืื ืื ื ืืข ืื ืืจืง ืืื ืืืืืช ืฉื PCIe 8 ืืื ืื ืืื ืืืื ืืืขืจืืช, ืืื ืืฉ 3.0 ืืจืืฆืื ืคื ืืืื, ื ืืชื ืืืืืืฃ ืืืชื ืืงืืืช ืืฉื ื ืืืืจืืช PEX2M4E2 ืื ืื ืืืืื, ืืืชื ื ืืชื ืืงื ืืช ืืื ืืงืื ืืืืืจ ืฉื 1 ืจืืื.
ืืืืืช ืื ืืื ื ืืืืจื ืื ืขืจืืช ืฉืืืื/BIOS RAID ืืืื ืื ื ืขืฉืชื ืืืืื ื, ืขื ืื ืช ืฉื ืืชื ืืืื ืืืืืืฃ ืืืืืืื ืืช ืื ืืืขืจืืช, ืืืขื ื-SSD/HDD ืขืฆืื, ืชืื ืฉืืืจื ืขื ืื ืื ืชืื ืื. ืืืืคื ืืืืืืื, ืื ืฉืชืืื ืืฉืืืจ ืืคืืื ืืช ืืขืจืืช ืืืคืขืื ืืืืชืงื ืช ืืขืช ืืขืืจ ืืืืืจื ืืืฉื/ืฉืื ื ืืืืืืื. ืืขืืงืจ ืฉืืฉ ืืฆืืืืช SATA ื-PCIe. ืื ืืื ืชืงืืืืืจ ืื ืื ืืื ื ืืืืง ืฉื ืืชื ืืืชืืื, ืจืง ืืืืจ ืืืื ืืงืฆืช ืืืืฉื.
ะฎะผะพัืืืจืช, ืืชื ืืืืข ืื ืงืืจื - ืืคืขืืื ืืชื ืฆืจืื ืืืืืคืืช ืืงืืช ืืช ืื ืืืขืจื ืืืชื ืืื ืืงืืช. ืืื ืื ื ืื ืจืืฆื ืืืื ื ืชืื ืื. ืืฉื ืื, ืื ืืืืื ืืืืืืจืช ืืืืงืืช ืื ืืืืช ืขื ืืฉืงืืคืืืช ืืืคืจืฆืื 5.25 ืฉื ืืืืจื ืืกืื ืืจืื.
ืืืื, ืืืืืื, ืืืชื ืกืืช ืืฉืืืืช ืฉืื ืืช ืฉื ืฉืืืจื ืืืืืื SSD ืืืื ืืงืก.
ืคืฉืืืืช ืืืืจื ืืฉืขืืืืช. ืืคืขื ืืืชื. ืื ืฉืื ืขืืื ืื ืฉืื ืื. ืืขื mdadm ืชืืื ืืฉ ืืคืฉืจืืืืช.
ืชืืื ื
ืืขืืจ, Debian 8 Jessie ืืืชืงื ืขื ืืืืืจื, ืฉืงืจืืื ื-EOL. RAID 6 ืืืจืื ืืืืื ื ืื ืืงืฉืืืื ืฉืืืืืจื ืืขืื ืืฉืืืื ืขื LVM. ืืื ืืคืขืื ืืืื ืืช ืืืจืืืืืืืช ื-kvm/libvirt.
ืื ืืืืืจ ืืฉ ื ืืกืืื ืืชืืื ืืืฆืืจืช ืืื ื ื ืคืืืฉ ื ืืืืื ืืชืืื SATA/NVMe, ืืื, ืืื ืื ืืฉืืืจ ืืช ืชืื ืืช ืืืชืืืื ืืจืืืื, ื ืืืจื ืืืืื ืื 18.04 ืืืขืจืืช ืืืขื, ืฉืืืจ ืืชืืืฆืื ืืกืคืืง, ืืื ืขืืืื ืืฉ ืื 3 ืฉื ืื ืฉื ืชืืืื ืืขืชืื.
ืืืขืจืืช ืืืืืืจืช ืืืืื ืืช ืื ืื ืืื ืืชืงื ื ืืืืืจื ืฉืื ื ืฆืจืืืื ืืืงืืคืกื. ืื ืื ื ืื ืฆืจืืืื ืฉืื ืชืืื ื ืื ืื ืืื ืืชืงื ืื ืฉื ืฆื ืฉืืืฉื.
ืืชืืื ื ืืืชืงื ื
ืืื ืืืชืงืื ืืช ืืืขืจืืช ืื ื ืืงืืงืื ื-Ubuntu Desktop Image. ืืืขืจืืช ืืฉืจืช ืืฉ ืืืืฉืื ืืชืงืื ื ืืจืฅ, ืฉืืจืื ืขืฆืืืืช ืืืืืืช ืฉืื ื ืืชื ืื ืืจื ืขื ืืื ืืืืคื ืฉื ืืืืฆืช ืืขืจืืช UEFI ืขื ืืื ืืืืกืงืื, ืืืงืืงื ืืช ืื ืืืืคื. ืืืชืื, ืืื ืืืชืงื ืจืง ืืืฆื UEFI. ืื ืืฆืืข ืฉืื ืืคืฉืจืืืืช.
ืื ืื ื ืื ืืจืืฆืื ืืื.
ืืื?ืืจืืข ืืืื, ืืชืืื UEFI ืืื ื ืชืืื ืืฆืืจื ืืจืืขื ืืืืชืจ ื-RAID ืฉื ืชืืื ืช ืืืชืืื, ืืืืืื ืฉ... ืืฃ ืืื ืื ืืฆืืข ืื ื ืืืื ืืช ืืืืืฆืช UEFI ESP. ืืฉื ื ืืชืืื ืื ืืืื ืืจื ื ืืืฆืืขืื ืืืงื ืืช ืืืืฆืช ื-ESP ืขื ืืื ื ืืืืง ืืืฆืืืช USB, ืื ืื ื ืงืืืช ืืฉื. ืืฉื ื ืืชืืื ืื ืืืฉืชืืฉืื ืืชืืื ื mdadm RAID 1 ืขื ืืื ื ืชืื ืื ืืจืกื 0.9 ืฉืืื ื ืืื ืขืื ืื-UEFI BIOS ืืจืืืช ืืช ืืืืืฆื ืืื, ืืื ืื ืื ืขื ืืจืืข ืืืืืฉืจ ืฉืื ื-BIOS ืื ืืขืจืืช ืืคืขืื ืืืืจื ืืืจืช ืืืชืืื ืืฉืื ื-ESP ืืฉืืืืื ืืกื ืืจื ืืืชื ืขื ืืืจืื ืืจืืืช.
ืื ืืกืฃ, ืืืชืืื ืฉื UEFI ืชืืื ื-NVRAM, ืฉืื ืืขืืืจ ืืื ืขื ืืืืกืงืื ืืืขืจืืช ืืืืฉื, ืืืืืื ืืื ืืืง ืืืื ืืื.
ืื, ืื ื ืืฆืื ืืืืฉ ืืืื ืืืฉ. ืืฉ ืื ื ืืืจ ืืืคื ื ืกืื ืืืื ืื ืฉื ืืืงื ืืืื, ืื ืงืจืืื ืืขืช Legacy/BIOS boot, ืื ืืฉืืื ืืช ืืฉื ืืืื ืฉื CSM ืืืขืจืืืช ืชืืืืืช UEFI. ืคืฉืื ื ืืจืื ืืืชื ืืืืืฃ, ื ืฉืื ืืืชื, ื ืฉืื ืืช ืืฆืืืืื ืื ื ืื ืืืชื ืืืืืืช ืืื.
ืื ืืช ืืจืกืช ืฉืืืื ืืขืืืื ืฉื ืืืืื ืื ืื ื ืืชื ืืืชืงืื ืืจืืื ืขื ืืืขื ืืืชืืื Legacy, ืืื ืืื, ืืื ืฉืืืืจืื, ืืคืืืช ืืฉ ืืคืฉืจืืืืช.
ืืื, ืื ื ืืืกืคืื ืืช ืืืืืจื ืืืืขืื ืื ืืช ืืืขืจืืช ืืืื ื ืืืืง ืื ืืชื ืืืชืืื ืฉื Ubuntu Live. ื ืฆืืจื ืืืืจืื ืืืืืืช, ืื ื ืืืืจ ืืช ืืจืฉืช ืฉืืชืืืื ืื. ืื ืื ืื ืขืืื, ืืชื ืืืื ืืืขืื ืืช ืืืืืืืช ืืืจืืฉืืช ืืืื ื ืืืืง ืืจืืฉ.
ืื ืื ื ื ืื ืกืื ืืกืืืืช ืฉืืืื ืืขืืืื, ืืคืขืืืื ืืช ืืืืืืืจ ืืืจืืื ื, ืืืืฆืืื ืืืจื:
#sudo bash
ืึตืืโฆ?ืืฉืืจื ืืืขืื ืืื ืืืจืืืจ ืืงื ืื ื ืืืืืืืืืจ ืขื ืกืืื. ื ืะพืืืืื ืืืืช ืืืืืืช ืืืชืจ ืืืืช ืะพืืืจืืืช ืืืืื ืืืชืจ. ืืฉืืื ืืื ืื ืืชื ืืืื ืืงืืช ืืช ืื ืขื ืขืฆืื. ืื ืฉืื ืจืืื ืืืฉืืื ืฉืฉืืืืฉ ื-sudo ืืืจื ืื ืืื ืืคืืืช ืื ืืืืจ. ืืืจืืช ืืืช:
#apt-get install mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc
ืืื ืื ZFS...?ืืืฉืจ ืื ื ืืชืงืื ืื ืชืืื ื ืขื ืืืืฉื ืฉืื ื, ืื ื ืืขืฆื ืืฉืืืืื ืืช ืืืืืจื ืฉืื ื ืืืคืชืื ืืชืืื ื ืืื ืื ืืื.
ืืืฉืจ ืื ื ืกืืืืื ืขื ืืชืืื ื ืืื ืืืืืืืช ืื ืชืื ืื ืฉืื ื, ืื ื ืืืงืืื ืืืืืื ืืฉืืื ืืขืืืช ืฉืืืืจ ืื ืชืื ืื ืืืื, ืฉื ืฆืืจื ืืฉืื ืืชืืฉืื.
ืื ืงืืืช ืืื ืื, ZFS ืืื ืคืจืืจื, ื-mdadm+lvm ืืื ืืืชืจ ืืื ืืืคื ืืื.
ืืืืื ื ืกืืืืืงืืืืืช, ืืืืืจ ืืขืืืฃ ืืืฉืืื ืืืคื ืืื ืืืฉืจืื ืืื ืฉืื ืืืืื ืื ืืืงืื ืคืจืืจื. ืฉื, ืืืืจ ืืื ืคืงื ืื ืืืื. ืืื ืฆืืจื ืืืืืืืช. ืคืฉืื ืืืชืจ ืืชืงื ืืช ืืชืขืืืจื. ืืื ืื ืืื ื ืืื ืชืฉืืื. ืืืืืช ืฉืื ืืืื ืืืชืจ. ืืชื ืชืืื ืืืื ืืืืจ ืจืืืืื ืืืืคื ืืื, ืืืชื ืืืื ืืชืงื ืืืคื ืืื ืืื ืืืื.
ืืื ืื BTRFS...?ืขื ืื ืช ืืืชืื ืืช ืืขืจืืช ืืืคืขืื, ืื ื ืืงืืงืื ืืืขืจืืช ืงืืฆืื ืฉื ืชืืืช ื-Legacy/BIOS GRUB ืืืืฅ ืืงืืคืกื, ืืืืงืืื ืชืืืืช ืืฆืืืืื ืืฆื ืืืื. ืื ื ื ืฉืชืืฉ ืื ืขืืืจ ืืืืฆืช /boot. ืื ืืกืฃ, ืืืืืจ ืืขืืืฃ ืืืฉืชืืฉ ื-FS ืื ืขืืืจ / (ืฉืืจืฉ), ืืื ืืฉืืื ืืฆืืื ืฉืืื ืชืืื ื ืืืจืช ืืชื ืืืื ืืืฆืืจ ืืืืฆืืช ื ืคืจืืืช ื-LVM ืืืขืืืช ืืืชื ืืกืคืจืืืช ืืืจืืฉืืช.
ืื ื ืืืกื ืชืืื ืืช ืฉื ืืืื ืืช ืืืจืืืืืืืช ืื ืืกืื ื ืชืื ืื ื-FS ืื.
FS ืื ืืฉืืฉ ืจืง ืืืฆืืจืช ืชืืื ืืช ืืฆื ืฉื ืืืขืจืืช ืืืื ืืืืืช ืืืชื ืืืืืจ ืืื ืืืขืืืจ ืืช ืืชืืื ืืช ืืืื ืืืืกืง ืืืืื ืืืืฆืขืืช ืฉืืืื/ืงืืื.
ืื ืืกืฃ, ืืืืืจ ืืืจื ืืื ืืขืืืฃ ืืฉืืืจ ืขื ืืื ืืืื ืชืืื ื ืืฉืืจืืช ืขื ืืืืืจื ืืืืคืขืื ืืช ืื ืืชืืื ืืช ืืืืจืืช ืืืืื ืืช ืืืจืืืืืืืช ืืืืฆืขืืช ืืืจืื ืืื ืืขืืจืช GPUs ืืืงืจื PCI-USB Host ื-KVM ืืจื IOMMU.
ืืืืจืื ืืืืืืื ืฉื ืืชืจื ืืืืืจื ืื ืืืกืื ื ืชืื ืื, ืืืจืืืืืืืฆืื ืืืืืื.
ืื ืืชื ืกืืื ืืืชืจ ืขื ZFS, ืื, ืืืืคื ืขืงืจืื ื, ืขืืืจ ืืืืฉืื ืฉืฆืืื ืื ื ืืชื ืื ืืืืืคื.
ืขื ืืืช, ืืืืืจ ืืชืขืื ืืืืื ื ืืชืืื ืืช ืืฉืืงืืฃ/RAID ืืืืชืืจืืช ืืืืื ืืช ืฉืืฉ ื-ZFS, BRTFS ื-LVM.
ืืืืขืื ื ืืกืฃ, ื-BTRFS ืืฉ ืืช ืืืืืืช ืืืคืื ืืชืืื ืืงืจืืืช ืืืชืืืช ืจืฆืฃ, ืื ืฉืืฉ ืื ืืฉืคืขื ืืืืืืช ืืืืชืจ ืขื ืืืืจืืช ืกื ืืจืื ืฆืืืืื ืืฆื/ืืืืืืื ื-HDD.
ืืืื ื ืกืจืืง ืืืืฉ ืืช ืื ืืืืฉืืจืื:
#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
ืืื ืื ื ืกืื ืืืชื ืืฉืื ืืืคื. ืขื ืืืช, ื-BIOS ืฉืื ื ืื ืจืืื ืืช ืืืื ื ืื ืืืื. ืื, ืื ืืขืืจื ืืืืืืื ื- RAID ืฉื ืชืืื ื. ืืคืืื ืื ื ืืฆืืจ ืฉื ืงืืขืื. ืื ืืชื ืจืืฆื ืืขืงืื ืืืจ ื"ืงืื ืื" ืื "ืืขืืงืจ", ืฆืืจ ืืืืฆื ืืืช ืืืืื, ืืื ืืืกืง ืงืฉืื.
SATA HDD
ืืื ืฆืืจื ืืืืฆืื ืืื ืืฉืื ืืืืื. ื ืืฆืืจ ืงืืข ืืื ืืื ืืืจ. ืื ื ื ืืฆืืจ ืืืืฆื ืืืืืื ืฉื-BIOS ืจืืื ืืช ืืืืกืงืื ืืืื ืืืืื ืืคืืื ืื ืกื ืืืชืื ืืื. ืื ืื ื ืืคืืื ื ืชืงืื ืืช 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 TB. ืื ืืืืื ืืืงืืื ืขืืืจ MBR, ืืื ืื ืฉื ืฉืชืืฉ ืื. ืืืืืช ืืฆืืจื, ื ืืชื ืืืืืืฃ ื-GPT. ืืืกืงื GPT ืืฉ ืฉืืืช ืชืืืืืช ืืืืคืฉืจืช ืืืขืจืืืช ืชืืืืืช MBR ืืจืืืช ืืช 4 ืืืืืฆืืช ืืจืืฉืื ืืช ืื ืื ืืืืงืืืช ืืชืื 2 ืืืจื-ืืืื ืืจืืฉืื ืื. ืืขืืงืจ ืืื ืฉืืืืฆืช ืืืชืืื ืืืืืฆืช bios_grub ืืืืกืงืื ืืืื ืฆืจืืืื ืืืืืช ืืืชืืื. ืื ืืคืืื ืืืคืฉืจ ืื ืืืชืื ืืืื ื ื GPT Legacy/BIOS.
ืืื ืื ืื ืืืงืจื ืฉืื ื.
ืืื ื ืืฆืืจ ืฉื ื ืืืงืื. ืืจืืฉืื ืืืื ืืืืื 1 GB ืืืฉืืฉ ืขืืืจ RAID 1 /boot.
ืืฉื ื ืืฉืืฉ ืขืืืจ RAID 6 ืืืชืคืืก ืืช ืื ืืฉืื ืืคื ืื ืฉื ืืชืจ ืืืขื ืืืืจ ืงืื ืื ืืืงืฆื ืืกืืฃ ืืืื ื.
ืื ืื ืืืืืจ ืืื ืืกืืื ืืื?ืืคื ืืงืืจืืช ืืจืฉืช, ืืื ื ื SATA SSD ืฉืื ื ืืืืืื ืืืืื SLC ืื ืืชื ืืืจืืื ืืื ืืืช ืืืืื ืฉื 6 ืขื 78 ืืืื-ืืืื. ืื ืื ื ืืงืืืื 6 ื'ืืื-ืืืื "ืืืื ื" ืืืื ืืืืื ืืื "ืืืื-ืืืื" ื-"ื'ื-ืืืื" ืืืืืืื ืื ืชืื ืื ืฉื ืืืื ื. ืฉืืจ ื-72 ืืืื-ืืืื ืืืงืฆืื ืืฉืื ืื ืืฉืืืืฉ.
ืืื ืืฉ ืืฆืืื ืฉืืฉ ืื ื ืืืืื SLC, ืืืฉืื ืชืคืืก ืืืฆื MLC 4 ืกืืืืืช. ืื ืฉืืืืจ ืขืืืจื ื ืืืขืฉื ืฉืขื ืื 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
ืืฆืืจืช ืืขืจืืื
ืจืืฉืืช, ืขืืื ื ืืฉื ืืช ืืช ืฉื ืืืืื ื. ืื ืืืจืื ืืืืืื ืฉืฉื ืืืืจื ืืื ืืืง ืืฉื ืืืขืจื ืืืคืฉืื ืืชืื mdadm ืืืฉืคืืข ืขื ืืฉืื ืืืคืฉืื. ืืืืื ืฉื ืืชื ืืฉื ืืช ืืช ืฉืื ืฉื ืืขืจืืื ืืืืืจ ืืืชืจ, ืืื ืื ืฆืขื ืืืืชืจ.
#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 ืืืจืืืื ืืื "ืืืชืื" ืืืชื.
ืขืืืจ ืืขืจืื SSD, RAID 1 DISCARD ื ืชืื ืืืงืืคืกื.
ืขืืืจ ืืขืจืื SSD RAID 6 DISCARD, ืขืืื ืืืคืขืื ืืืชื ืืคืจืืืจืื ืฉื ืืืืื ืืืืื.
ืืฉ ืืขืฉืืช ืืืช ืจืง ืื ืืื ืืื ื ื ื-SSD ืืืฉืืฉืื ืืืขืจืืื ืืจืื 4/5/6 ืืืขืจืืช ืื ืืฉ ืชืืืื ืคืขืืื ืขืืืจ discard_zeroes_data. ืืคืขืืื ื ืชืงืืื ืืืื ื ืื ืืืืจืื ืฉืืืืจืื ืืงืจื ื ืฉืืคืื ืงืฆืื ืืื ื ืชืืืช, ืืื ืืืขืฉื ืืื ืื ืฉื, ืื ืฉืืคืื ืงืฆืื ืื ืชืืื ืขืืืืช. ืืจืืข, ืชืืืื ืืืื ื ืืืขื ืืื ืืงืื, ืขื ืืืช, ืืฉื ื ืืื ื ืื ืืฉื ืื ืืงืืฉืื ืขื ืฉืืืืืช. ืืกืืื ืื, ืชืืืืช 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
ืืื ืื ืื ืืืื...?ืืืืืืช ืืืื ืื ืชื ืืฉ ืืฉืคืขื ืืืืืืช ืขื ืืืืจืืช ืืงืจืืื ืืืงืจืืืช ืืืืืงืื ืขื ืืืื ืื ืชื ืืืื. ืื ืงืืจื ืืืื ืฉืคืขืืื ืืืช ืืืืื ืืืชืืื ืืืื ืืืืื ืืืชืืฆืข ืืืืืื ืืืืฉืืจ ืืืื. ืืื, ื-IOPS ืืื ืืืืฉืืจืื ืืกืืื. ืขื ืคื ืืกืืืืกืืืงื, 99% ืื-IO ืืื ื ืขืืื ืขื 512K.
RAID 6 IOPS ืืื ืืชืืื ืชืืื ืคืืืช ืื ืฉืืื ื-IOPS ืฉื ืืื ื ืืื. ืืืฉืจ, ืืงืจืืื ืืงืจืืืช, IOPS ืืืื ืืืืืช ืืืื ืคื ืืื ืืื ืฉื ืืื ื ืืื, ืืืื ืืฉ ืืฉืืืืช ืืจืืืืช ืืืืื ืืืืืง.
ืืืืืจ ืื ืจืืื ืืขื ืื ืืกืืื ืืืืขื ืคืจืืืจ ืฉืืื ืจืข ื-RAID 6 by-design ืืืืงืื ืืืช ืืืืขื ืืช ืื ืฉ-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.
ืขื ืืืช, ืขืืืื ื ืฆืืจื ืืช ืืืขืจื ืืืืืจ ืืื ืืฆืจืืื ืืืจืื, ืืืื swap, metadata ื-LVM-cache ื-LVM-thinn metadata, ืื ื ืืฆืืจ LVM VG ืขื ืืขืจื ืื.
#pvcreate /dev/md0
#vgcreate root /dev/md0
ืืืื ื ืืฆืืจ ืืืืฆื ืขืืืจ ืืขืจืืช ืงืืฆื ืืฉืืจืฉ.
#lvcreate -L 128G --name root root
ืืืื ื ืืฆืืจ ืืืืฆื ืืืืืคื ืืคื ืืืื ื-RAM.
#lvcreate -L 32G --name swap root
ืืชืงื ืช ืืขืจืืช ืืคืขืื
ืืกื ืืื, ืืฉ ืื ื ืืช ืื ืืืจืืฉ ืืืชืงื ืช ืืืขืจืืช.
ืืคืขื ืืช ืืฉืฃ ืืชืงื ืช ืืืขืจืืช ืืกืืืืช Ubuntu Live. ืืชืงื ื ืจืืืื. ืจืง ืืฉืื ืืืืจืช ืืืืกืงืื ืืืชืงื ื, ืขืืื ืืฆืืื ืืช ืืืืจืื ืืืืื:
- /dev/md1, - ื ืงืืืช mount /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" ืขืืืจ /home.
ืืืื ื ืชืืื ืืืชืงื ื...
ืืืชืงื ื ืชืกืชืืื ืืชืืืช ืื-ืฉืื ืืืืืืืช ืืืฆืืื ืช ืฉืืืื ืืืชืงื ืช ืืืขื ืืืชืืื. ืืืจืื ืืฆืขืจ, ืื ืชืืื ืืฆืืช ืื-ืฉืื ืื ืืืืฆืขืื ืกืื ืืจืืืื ืืืืืฉืื ืืืชืงื ื. ืื ื ืืชื ืชืงืื ืืืืขืจืืช ืื ืื ืกืื ืฉืื, ืืืืืขืื ืืฉืืืื ืขืืืื ื ืงื ืฉื Ubuntu Live. ืคืชื ืืช ืืืจืืื ื, ืืฉืื:
#sudo bash
ืฆืืจ ืกืืืืช chroot ืืื ืืืืฉืื ืืืชืงื ื:
#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:
#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
ืื ืื ืืื..?ืืฆืจื ื ืงืืืฆื ืฉื ืืืงื udev ืฉืืขืฉื ืืช ืืคืขืืืืช ืืืืืช:
- ืืืืจ ืืช ืืืื ืืืืืื ืฉื ืืืืืง ืขืืืจ RAID 2020 ืืื ืืืชืืื ืืฉื ืช 6. ืขืจื ืืจืืจืช ืืืืื, ืื ื ืจืื, ืื ืืฉืชื ื ืืื ืืฆืืจืช ืืื ืืงืก, ืืื ืืื ืืกืคืืง ืืืฉื ืืื ืจื.
- ืฉืืืจ ืืื ืืืื ืฉื IO ืืืฉื ืืืืงืืช/ืกื ืืจืื ืืขืจื. ืื ืืื ืืื ืืข ืืืืขืจืืื ืฉืื ืืืืชืงืข ืืืฆื ืฉื ืกื ืืจืื ื ืฆืื ืชืืช ืขืืืก.
- ืืืื ืืช ื-IO ืืืงืกืืืื ืืืืื ืืืืงืืช/ืกื ืืจืื ืฉื ืืขืจืืื. ืื ืืืจืื ืืื ืฉืกื ืืจืื/ืืืืงืช SSD RAIDs ืื ืืืื ืืช ืืืื ื ืื ืฉืื ืืฆืืจื ืืื. ืื ื ืืื ืืืืืื ืขืืืจ NVMe. (ืืืืจืื ืืืื ืืจืืืืืืจ? ืื ืฆืืงืชื.)
- ืืกืจื ืขื ืืืกืงืื ืืขืฆืืจ ืืช ืกืืืื ืืฆืืจ (HDD) ืืืืฆืขืืช APM ืืืืืจ ืืช ืคืกืง ืืื ืืฉืื ื ืขืืืจ ืืงืจื ืืืกืง ื-7 ืฉืขืืช. ืืชื ืืืื ืืืฉืืืช ืืืืืืื ืืช APM ืื ืืืื ื ืื ืฉืื ืืืืืื ืืขืฉืืช ืืืช (-B 255). ืขื ืขืจื ืืจืืจืช ืืืืื, ืืืื ื ืื ืืขืฆืจื ืืืืจ ืืืฉ ืฉื ืืืช. ืืื ืืขืจืืช ืืืคืขืื ืจืืฆื ืืืคืก ืืช ืืืืื ืืืืกืงืื, ืืืืกืงืื ืืกืชืืืื ืฉืื, ืืืื ืืชืืื ืืืืฉ. ืืืืกืงืื ืืฉ ืืกืคืจ ืืจืื ืืืืื ืฉื ืกืืืืื ืฆืืจ. ืืืืืจ ืืจืืจืช ืืืื ืคืฉืื ืืื ืืืื ืืงืืืช ืืืจืื ืืช ืืืืกืงืื ืฉืื ืชืื ืืื ืฉื ืื. ืื ืื ืืืืกืงืื ืกืืืืื ืืื, ืืื ืฉืื ื ืื "ืืคืืืคืื", ืขื ืืืืจืืช ืืจืืจืช ืืืืื ืืืชืืืืืช, ืฉืืืจืืืช ื-RAID ืืืืจืืืช ืืื ืืื ื-MAID.
- ืืชืงื Readahead ืขื ืืืกืงืื (ืืกืชืืื) 1 ืืื-ืืืื - ืฉื ื ืืืืงืื ืจืฆืืคืื/ื ืชื RAID 6
- ืืฉืืช ืืช Readahead ืืืขืจืืื ืขืฆืื.
ืืืื ื ืขืจืื ืืช /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
ืืื..?ื ืืคืฉ ืืช ืืืืืฆื /boot ืืคื UUID. ืชืืืืจืืช ืฉืืืช ืฉื ืืขืจืืื ืขืฉืื ืืืฉืชื ืืช.
ื ืืคืฉ ืืช ืืืืงืื ืื ืืชืจืื ืืคื ืฉืืืช LVM ืืกืืืื /dev/mapper/vg-lv, ืืืืืื ืื ืืืืื ืืืืฆืืช ืืฆืืจื ืื ืืืืืืืช.
ืื ืื ื ืื ืืฉืชืืฉืื ื-UUID ืขืืืจ LVM ืืืื UUID ืฉื ืืืฆืขื ืืืกืื LVM ืืชืฆืืืื ืืืฆื ืฉืืื ืืืืืื ืืืืืช ืืืื.ืืจ /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 (cmeta)
- ืื ืืืืฉืืจืื ื-VG ืขื ืชืืื ืืช ืืฉื. ืืื ืืืื ืื ื ืชืืื ืืช ืืืกืง ืฉื ืืืื ืืช ืืืจืืืืืืืช, ืืื ืื ื ืื ืจืืฆืื ืฉ-LVM ืืืืจื ืืคืขืื ืืืฆืขื ืืืกืื ืืฉืืืืื ืืืขืจืืช ืืืคืขืื ืืืืจืืช.
- ืื ืืืืฉืืจืื ื-VG ืขื ืืฉื ืืืืื. ืืื ืืืื ืื ื ืขืืชืงื ืืืืื ืฉื ืชืืื ืืช ืืืื ืืช ืืืจืืืืืืืช.
- ืื ืืืืฉืืจืื ืฉืฉืื ืืกืชืืื ื-"gpv" (ื ืคื ืคืืื ืฉื ืืืจื)
ืืคืขืื ื ืชืืืืช DISCARD ืืขืช ืคืื ืื ืฉืื ืคื ืื ื-LVM VG. ืืืืจ. ืื ืืืจืื ืืืืืงืช LVs ื-SSD ืื ืืืืืช ืืื. ืื ืื ืืืืืื ืขื SSD RAID 6. ืขื ืืืช, ืขื ืคื ืืชืืื ืืช, ื ืฉืชืืฉ ืืืงืฆืื ืืงื, ืื ืฉืื ืื ืืคืจืืข ืื ื ืืื.
ืืืื ื ืขืืื ืืช ืชืืื ืช initramfs:
#update-initramfs -u -k all
ืืชืงื ืืืืืจ ืืช grub:
#apt-get install grub-pc
#apt-get purge os-prober
#dpkg-reconfigure grub-pc
ืืืืื ืืืกืงืื ืืืื ืืืืืจ?ืื ืื ืฉืื sd*. ืืืขืจืืช ืืืืืช ืืืืืช ืืกืืืืช ืืืชืื ืืื ืืื ื SATA ืื SSD ืคืืขืืื.
ืืื ืืืกืืคื os-prober..?ืืขืฆืืืืช ืืชืจ ืืืืืื ืฉืืืืืช.
ืื ืื ืขืืื ืืฉืืจื ืื ืืื ื-RAIDs ื ืืฆื ืืืฆื ืคืืื. ืืื ืื ืกื ืืืคืฉ ืืช ืืขืจืืช ืืืคืขืื ืืืืืฆืืช ืืืฉืืฉืืช ืืืืื ืืช ืืืจืืืืืืืช ืืคืืขืืืช ืขื ืืืืจื ืื.
ืื ืืชื ืฆืจืื ืืช ืื, ืืชื ืืืื ืืขืืื ืืช ืื, ืืื ืืืืจ ืืช ืื ืืืืืจ ืืขืื. ืื ื ืืืืืฆื ืืืคืฉ ืืืื ืืจื ื ืืชืืื ืื ืืืืคืืจ ืืืืื ืฉืืืืืช.
ืขื ืื ืืฉืืื ื ืืช ืืืชืงื ื ืืจืืฉืื ืืช. ืื ืืืื ืืืชืื ืืืืฉ ืืืขืจืืช ืืืคืขืื ืืืืฉื ืฉืืืชืงื ื. ืื ืชืฉืื ืืืกืืจ ืืช ื- Live CD/USB ืื ืืชื ืืืชืืื.
#exit
#reboot
ืืืจ ืื ืืื ืืืื ื ื SATA SSD ืืืชืงื ืืืชืืื.
LVM ืขื SATA SSD
ืืฉืื ืื, ืืืจ ืืชืืื ืืืขืจืืช ืืืคืขืื ืืืืฉื, ืืืืจื ื ืืช ืืจืฉืช, apt, ืคืชืื ื ืืช ืืืืืืืจ ืืืกืืฃ ืืืฉืงื ื:
#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 ืืฉื root. ืืื ืื ืืืืกืืฃ ืืื ื-VG ืืื?
ืื ืืฉื ื ืืกืคืจ PVs ื-VG, ืื ืืื ืฉื-VG ืืืคืขื ืืืืื, ืื ื-PVs ืืืืืื ืืืืืช ื ืืืืื (ืืงืืื). ืืืืฆื ืื ืืืื ืืื LVM RAID, ืฉืื ื ืื ืืฉืชืืฉืื ืื ืืืืื ื.
ืื ืื ื ืืืื ืจืืฆืื ืฉืื ืืฉ ืืฉื (ืืืืื ื ืชืื ืื) ืืื ืืื ืืืขืจืื ื-RAID 6, ืืขืจืืช ืืืคืขืื ืชืืชืื ืืจืืื ืืชืืชื ืื ื ืืช ืืืืืื ืืช ืืคืชืืจ ืืช ืืืขืื.
ืืฉื ืื, ืืจืืช ืืืคืฉืื ืืจืืฉืื ื ื ืืืื ืื ืกืื ืฉื "ืืืื" ืคืืืืช ื-VG ื ืคืจื.
ืืืืื ื ืืืขืืช, ืืขืจืื RAID ืฉืื ืื ืฉืืืืื ื"ืชืืืื ืืืื ืืช" ืฉืื ืื. ืื ืืืื ืืืฆืืจ ืขืืืจื ื ืงืืืช ืืฉื ื ืคืืฆื ื ืืกืคืช ืขื ืืื ืืืืกืชื ื-VG ืืื.
ืื ืืืืืช ืฉื LVM ืืจืืช "ืืืืจื" ืชืืคืฉืจ ืื ื ืืืชืื ืืืืคื ืฉืจืืจืืชื ืืชืืืืช ืฉื ืืขืจืื RAID ืฉืื ืื ืขื ืืื ืฉืืืืื ืืืจืืื ืฉืื ืืช. ืืืฉื - ืืจืืฅ ืื ืืื ืืช bcache + LVM ืืง, bcache + BTRFS, LVM cache + LVM thin, ืชืฆืืจืช 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 SSD ืฉืื ื ืืฉ ืื ืืืืื SLC. 4 ืืืื-ืืืื ืฉื "ืืืคืฉื" ื-18 ืืืื-ืืืื ืืื ืื ืืืื ืืฉืื ืืคื ืื ืฉืชืคืืก ื-3-bit MLC. ืืืืจ ืืืฆืื ืืืืืื ืืื, ืืื ื ื SSD ืฉื NVMe ืื ืืืื ืืืืจืื ืืืจืื ืื-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. ืืชืจื ืืื, ืืื ืฉืืืืื ืงืื ืืืชืจ, ืื ืืชืฆืืจื ืืชืคืงืืช ืืื ืืืชืจ ืืืงืืื ืืงืจืืืช.
64k ืืื ืืืื ืืืืืง ืืืื ืืืื ืืืืชืจ ืขืืืจ 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 ืืืืจื ื-cachedata.
ืืืืจืช 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 ืืืื-ืืืื: 4294967296B
ืืืคื ืืฉื ืืื ืืืืกืฃ 4194304B ืขืืืจ ืืื ื ืชืื ืื ืฉื LVM PV: 8594128896B
ืืืื ื ืืฆืืจ ืืืืฆื ื ืคืจืืช ื-NVMe RAID 1 ืืื ืืืงื ืขืืื ืืื ื ืชืื ืื ืืงืื ืฉื LVM ืืขืืชืง ืืืืืื ืฉืืื:
#lvcreate -L 8594128896B --name images root
ืืฉืืื ืื..?ืืื ืขืฉืืื ืืืชืขืืจืจ ืืฉืืื: ืืืืข ืืืงื ืื ืคืจื ืืื ื ืชืื ืื ืืงืื ืฉื LVM ืื ืื ืขืืืื ืืืฉืืจื ืืืืืื ื-NVMe ืืืขืืื ืืืืืจืืช.
ืืืจืืช ืฉืืืืืจืืช ืืฉืืื ืืื, ืืื ืจืืืงื ืืืกืืื ืืขืืงืจืืช. ืืขื ืืื ืืื ืฉืืืืืื ืืื ื ืงืืืช ืืฉื. ืืฉืื ืขืืื ืืงืจืืช ืื, ืืื ืืืื-ื ืชืื ืื ืืืงืื ืฉื LVM ืืืฉืืจื ืืืืืื, ืื ืืืจืื ืืืื ืืืืืื ืืืืืืื. ืืื ืืื ื ืชืื ืื ืืืืื, ืื ืืืื ืืืขื ืืืชื ืืคืฉืจื ืืืจืืื ื ืคืืื ืืงืื.
ืขื ืืื ืืขืืจืช ืืืื ื ืชืื ืื ืื ืคื ื ืคืจื ืฉืืื ื ืฉืืืจ, ืื ืืืืจ, ืื ื ืืืืืืื ืืช ืืืืืืช ืืืื ื ืชืื ืื ืืืงืจื ืฉื ืืืืื ืืืืื ืื ืืฉืืชื. ืืืงืจื ืื, ืื ืื ืืง ืฉื ืืจื ืขื ืืื ืืืืื ืืืืื ืืืื ืืงืืื ืืชืื ืืจืืื ืืงืื, ืื ืฉืืคืฉื ืืช ืืืื ืืฉืืืืจ ืืกืืจื ืืืื. ืขื ืกืืืจืืช ืืืืื, ื ืืงืื ืืื ืืฉืืืืจื ืืืืฆืขืืช ืืืื ื FS.
ืืชืจื ืืื, ืื ืฆืืืื ืืขืืจ ืชืืื ืช ืืฆื ืฉื ื ืคื ืืง, ืืืืืจ ืืื ืืืืืื ืืื ืืกืื ืืจื ืืืืืื ืืคืืืช ืคืขื ืืืช, ืืื, ืืฉื ืืขืืฆืื ืืคื ืืื ืฉื LVM thin, ืฉืืืืช ืชืืื ืช ืืืฆื ืชืืืื ืืืงืจื ืฉื ืืืืื ืืืืื. .
ืืืื ื ืืฆืืจ 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
ืืื -Z yืื ืืกืฃ ืืื ืฉืืฆื ืื ื ืืขื ืืืขืฉื - ืืื ืืข ืืืืคื ืฉื ื ืชืื ืื ืืืืื ื ืืืจืืืืืืช ืืืช ืืืืื ื ืืืจืืืืืืช ืืืจืช ืืขืช ืืืืงื ืืืืฉ ืฉื ืฉืื - ื ืขืฉื ืฉืืืืฉ ื ืืกืฃ ืืืคืก ืืื ืืืืืืจ ืืช ืืืืจืืช ืืืชืืื ืืืงืจืืืช ืืืืงืื ืืงืื ืื ื-64k. ืื ืืชืืื ืฉื ืคืืืช ื-64k ืืืืืจ ืฉืื ืืืงืฆื ืืขืืจ ืฉื ืื ืคื ืืืง ืืืคืื ืืืืฉืืจ ืงืฆื ืฉื 64K ืืืืืื. ืื ืืืคืฉืจ ืืืฆืข ืืช ืืคืขืืื ืืืื ืืจื ืืืืืื, ืชืื ืขืงืืคืช ืืืืฉืืจ ืืืืืืกื.
ืืืื ื ืขืืืจ ืืช ื-LVs ื-PVs ืืืชืืืืื:
#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 ืืืื-ืืืื ืฉื ืืฉืื SSD.
ืงืจืืื ืืืชืืื ืืขืืจืืื?ืื. ืืืืื ื ืืืจืืฅ ืืช ืืืื ื ืืงืจืืื ืืืืชืืื ืื ืคืจื. ืืชืจ ืขื ืื, ืืืืื ื ืืืืื ืฉืื ืืืืืื ืื ืืกืื ืืจื ืื ืื ืฉืืชืืื ืฉื ืขืฉืชื ืืขืืจ ืื ืชืฉืคืืข ืขื ืืงืจืืื.
ืืชืืฆืืืช ืืฉืชื ื ืืืื ืืืืื ืืืฉืงื ืืจืืฉืื ื ืืืืืืช ืืืืจ ืืื ืืื ืฉืืืืืื ืืื ืคื ืืืง ืืชืืืื, ืืื ืชืืื ืื ืืืขืจืืช ืืฆืืืื ืืกื ืืจื ืืช ืืืืืื ืื ืฉืืืืื ืืืืื ืืืฉืงื ืืืืจืื ื.
ืืื ืืืชืจ, ืื ื ืืืืืฅ ืืืืื ืืช ืืืืืจืืช ืขื ื ืคื ืืง ืืืจ ืืื ืฉืืื ื ืฆืืืื ืืืืืง ืชืืื ืช ืืฆื. ืืืืืจ ืืืืชื ืืืืื ืืช ืืจืืืช ืืืฆื ืืชืืื ืืงืจืืืช ืืืืฆืช ืืืืืช ืืื ืืืืจ ืืฆืืจืช ืชืืื ืช ืืืฆื ืืจืืฉืื ื, ืืืืืื ืืืฉืจ ืืืืืื ืขืืืื ืื ืืื ืืืืืืื. ืื ืงืืจื ืขืงื ืกืื ืืืงื ืฉื ืืชืืื ืืขืชืงื ืขื ืืชืืื, ืืืฉืืจ ืืืืื ืืืืืงื ื ืคื ืืงืื, ืืืขืืืื ืฉืืชืืื ืืงืจืืืช ื-RAID 6 ืืืคืืช ืืงืจืืื ืืงืจืืืช ื-RAID 6 ืืืืจืื ืืชืืื ืืืืืื. ืืชืฆืืจื ืฉืื ื, ืงืจืืื ืืงืจืืืช ื-RAID 6 ืืืืจื ืขื ืคื 6 (ืืกืคืจ ืืื ื ื SATA SSD ืืืขืจื) ืืืฉืจ ืืชืืื. ืื ืืืืงืื ืขืืืจ CoW ืืืงืฆืื ืืจืฆืฃ ืืืืืจ ืืง, ืืื ืืืงืืื, ืืจืื, ืืืคืืช ืื ืืจืฆืฃ.
ื ืืชื ืืืฉืชืืฉ ืืฉืชื ืืชืืื ืืช ืืืื ืืืืืชื.
ืฉืืืจ ืชืืื ืืช ืืฆื "ืงืืืจื ืืืืช".
ืืื ืืืคืืืช ืืช ืืกืืืื ืืืืืื ื ืชืื ืื ืืืงืจื ืฉื ื ืืง/ืืืืื ืืืืื, ืืืืืจ ืืฆืืข ืืืฆืื ืืช ืืคืจืงืืืงื ืฉื ืกืืืื ืฆืืืืื ืืฆื ืืื ืืืืืื ืืช ืฉืืืืชื ืืืงืจื ืื.
ืจืืฉืืช, ืืืืืื ืฉืืื ื ืชืื ืื ืฉื ื ืคื ืืง ื ืืฆืืื ืืืืฉืืจ ืื ืฉืืืจ, ืืืื ื ืชืื ืื ืืืื ืขืงืืืื ืืืคืกืืื ืืคืฉืจืืื ืืืืืื ืืชืื ืืืืงื ื ืชืื ืื.
ืืืืืจ ืกืืืื ืืชืืื ืืช ืืื ืืืืื ืืช ืฉืืืืช ืื ืชืื ืื ืืชืื ืืชืืื ืืช ืืืงืจื ืฉื ืืืืื ืืืืื:
- ืขืืืจ ืื ืืจื ืืง ืขื ืืฉื <name>, ืฆืืจ ืชืืื ืช ืืฆื ืขื ืืฉื <name>.cached
- ืืืื ื ืืืืจ ืืช ืกืฃ ืืืขืืจื ืืขืจื ืืืื ืกืืืจ:
#lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
- ืืืืืื ืื ื ืืืืงืื ืืช ืืกืคืจ ืืืืืงืื ืืืืืืืืื ืืืืืื:
#lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}'
ืขื ืฉื ืงืื ืืคืก. ืื ืืืคืก ืืกืจ ืืืฉื ืืื ืจื ืืื, ื ืืชื ืืืฆืืจ ืืืชื ืขื ืืื ืืขืืจ ืืื ื ืฉื ืืืืืื ืืืฆื ืืชืืื. ืขื ืืืช, ืืืชืืฉื ืืืืคืืื ื ืืืืืจืืช ืฉื ืืขืจืื SATA ื-NVMe SSD ืฉืื ื, ืืื ืื ืืช ืืฉืื ื-TBW ืฉืืื, ืชืืื ืืชืคืืก ืืช ืืจืืข ืืืืืจืืช ืืืื ืืฉื ืืช ืืช ืืฆื ืืืืืื, ืื ืฉืืืืืจื ืฉืื ืชืืื ืืืืืืื ืืช ืื ืืืฉืื ืฉืื ื ืืื ืืืื. ืขืงื ืืืืืืช ืืฉืืืื, ืืืขืจืืช, ืืืืคื ืขืงืจืื ื, ืื ืืกืืืืช ืืืืืช ืชืืช ืขืืืก ืืชืืื ืฉื 100% ืื ืืืื. ืืื ื ื ื-NVMe SSD ืฉืื ื ืืชืืช ืืขืืืก ืืชืืื ืฉื 100% ืืืฆื ืืืืืืื ืืช ืืืฉืื ืคื ืืื 3-4 ืฉื ืืืื. ืืื ื ื SATA SSD ืืืืืงื ืืขืื ืจืง ืคื ืฉื ืืื ืืืชืจ. ืืื, ื ื ืื ืฉืจืื ืืขืืืก ืืืื ืืงืจืืื, ืืืฉ ืื ื ืคืจืฆืื ืงืฆืจื ืืืื ืืืกืืช ืฉื ืคืขืืืืช ืืืืื ืืืืืื ืืฉืืืื ืขื ืขืืืก ื ืืื ืืืืืฆืข ืืืชืืื. - ืืจืืข ืฉืชืคืกื ื (ืื ืขืฉืื ื) ืืคืก, ืื ื ืืฉื ืื ืืช ืฉื <name>.cached ื-<name>.committed. ื-<name>.committed ืืืฉื ื ืืืง.
- ืืืืืคืื, ืื ืืืืืื ืืื ื-100%, ื ืืชื ืืืฆืืจ ืืืชื ืืืืฉ ืขื ืืื ืกืงืจืืคื, ืืืื ืื ืงืืช ืืืชื. ืขื ืืืืื ืจืืง ืืืืฆื, ืืืขืจืืช ืขืืืืช ืืจืื ืืืชืจ ืืืจ ืืขืช ืืชืืื.
- ืืืืจ ืืช ืกืฃ ืืืืืจื ืืืคืก:
#lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata
ืื ืืื ืข ืืื ืืช ืืช ืกื ืืจืื ืืืืืื ืขื ืืืืื ืืจืืฉืืช. - ืื ื ืืืชืื ืื ืขื ืฉืืฆืืืจื ืื ืืจืื ืฉืื ืืืื ืืืืืื
#lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}'
ืื ืฉืืืืืืจ ืืืืื. - ืื ืื ื ืืืืจืื ืฉืื.
ืืื ืงืฉืืื ืขื ืกืฃ ืืืืจื...?ืืขื ืืื ืืื ืฉืืคืืขื, ืืงืืื "ืืงืจืืืช" ืืื ืืืขืฉื ืื ืืืืจื ืืงืจืืืช. ืื ืืชืื ื ืืฉืื ืืืืืจ ืืืืื ืฉื 4 ืงืืืืืืื, ืืฉ ืกืืืจืืช ืืืืื ืฉืืืงืืช ืืงืจืืืืช ืชืืขืฉื ืจืฉืืื ืืืืชื ืกืงืืืจ ืื ืืื ืืืกืงืืืจืื ืืกืืืืื (+- 32K).
ืขื ืืื ืืืืจืช ืกืฃ ืืืืืจื ืืืคืก, ืื ื ืืืืื ืืช ืกื ืืจืื ืืืชืืื ื-SATA SSD ืืืฆืืจืื ืืกืคืจ ืฉืื ืืืื ืืืืืง ืืื ืฉื 64K ืืืืืื. ืื ืืืกื ืืืืคื ืืฉืืขืืชื ืืช ืืืฉืื ืฉื SATA SSD.
ืืืคื ืืงืื..?ืืืจืื ืืฆืขืจ, ืืืืืจ ืืืฉืื ืืช ืขืฆืื ืื ืืกืคืืง ืืืืฉืจ ืืคืืชืื ืชืกืจืืื ืืฉ, ืื ืืื 100% ืืืืืืืืงื ืืืชืืื ืืคืืชืื ืืื ืข "ืืืื", ืืื ืืื ืืืืื ืฉืืฃ ืืื ืื ืฆืจืื ืืืฉืชืืฉ ืืงืื ืื ืืจื ืฉืืืฆื ืืืืื ืึทืึตืจ.
ืื ื ืืืฉื ืฉืื ืฉื ืืงืฆืืข ืืชืืื ืื ืืืืื ืืชืืจ ืืืืคื ืขืฆืืื ืืช ืื ืืืืืืื ืฉืชืืืจ ืืขืื, ืืืืืช ืืฆืืจื, ืืืืื ืืคืืื ืืขืฆื ืืืชื ืืคื ืืฉืืจืืช ืืขืจืืชื, ืืคื ืฉืืืืืจ ื ืืกื ืืขืฉืืช.
ืกืืืช ืกืืืื ืชืืื ืช ืืฆื ืคืฉืืื ืืื ืชืืคืฉืจ ืื ื ืื ืจืง ืืงืื ืื ืืืื ืชืืื ืช ืืฆื ืืืช ืืกืื ืืจื ืช ืืืืืื ืขื ื- SATA SSD, ืืื ืื ืชืืคืฉืจ ืื ื, ืืืืฆืขืืช ืืื ืืขืืจ thin_delta, ืืืืืช ืืืื ืืืืงืื ืฉืื ื ืืืืจ ืืฆืืจืชื, ืืื ืืืงื ืืช ืื ืืง ืขื ืืืจืืื ืืขืืงืจืืื, ืืคืฉืืื ืืืื ืืช ืืืชืืืฉืฉืืช.
TRIM/DISCARD ื-libvirt/KVM
ืื ืืืกืื ืื ืชืื ืื ืืฉืืฉ ืขืืืจ KVM ืืืจืืฅ libvirt, ืื ืื ืืืื ืจืขืืื ืืื ืืืื ืืช ื-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>
DISCARDs ืืืื ืืืขืจืืืช ืืคืขืื ืืืจืืืช ืืขืืืืืช ืืฆืืจื ื ืืื ื ืขื ืืื 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
ืืืื ื ืขืชืืง ืืช ืืชืกืจืื:
ืืจืื ืงืื bash ืืคืืื. ืืฉืืืืฉ ืขื ืืืจืืืชื ืืืื. ืื ืชืืชืื ืืืชืืื ืืืขืืื ืืกืืคืจ...#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:
ืขืื ืงืฆืช ืงืื bash#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
ืืื ื ืืืืง ืืช ืื ืื ืฉืื ืืช ืื ื-cron:
#/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
ืืื ื ืืืืง ืืช ืื ืื ืฉืื ืืช ืื ื-cron:
#/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 ืืืืืช ืืืกืืก ืืืฆืืจืช ืืฉืืื ืืืกืื/vm ืืืืืจ ืืืืืืจืคื ืขื ืืชืืจืืช ืืืกืคืจ ืืืฉืืช ืืืืฆืขืืช ืืืฉืืื ืฉืืืื ืืื ืืืชืืื, ืืืื ืืจื ื ืืืืชื ืืจืฉืชืืช P2P.
ืืงืืจ: www.habr.com