Какво ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ LVM ΠΈ ΠΌΠ°Ρ‚Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°?

Π”ΠΎΠ±ΡŠΡ€ Π΄Π΅Π½.
Искам Π΄Π° сподСля ΠΎΠΏΠΈΡ‚ с общността относно ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° систСма Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° 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 cache ΠΈ LVM thin.
  • ИзползванС Π½Π° BTRFS снимки ΠΈ send/receive Π·Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅.
  • ИзползванС Π½Π° LVM thin снимки ΠΈ thin_delta Π·Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ Π² стил BTRFS.

Ако Π²Π΄ΡŠΡ…Π½ΠΎΠ²ΡΠ²Π°, моля, ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

ДСкларация

ΠΠ²Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π΅ носи Π½ΠΈΠΊΠ°ΠΊΠ²Π° отговорност Π·Π° послСдствията ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ/ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ/ΠΊΠΎΠ΄/ΡΡŠΠ²Π΅Ρ‚ΠΈ/Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ статия. Π§Π΅Ρ‚Π΅ΠΉΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΡŠΠ²Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ Π½Π°Ρ‡ΠΈΠ½ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΏΠΎΠ΅ΠΌΠ°Ρ‚Π΅ отговорността Π·Π° всички послСдствия ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ дСйствия. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ послСдствия Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚:

  • Π˜Π·ΠΏΡŠΡ€ΠΆΠ΅Π½ΠΈ Π΄ΠΎ хрупкавост NVMe SSD.
  • Напълно ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠ°Π½ рСсурс Π½Π° запис ΠΈ ΠΎΡ‚ΠΊΠ°Π· Π½Π° SSD устройства.
  • Пълна Π·Π°Π³ΡƒΠ±Π° Π½Π° всички Π΄Π°Π½Π½ΠΈ Π½Π° всички устройства, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия.
  • НСвалидно ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π½ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅.
  • Π˜Π·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π°Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π½Π΅Ρ€Π²ΠΈ ΠΈ срСдства.
  • Всички Π΄Ρ€ΡƒΠ³ΠΈ послСдствия, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡ€Π΅.

ЖСлязо

ИмашС Π½Π°Π»ΠΈΡ‡Π½ΠΎ:

Основна ΠΏΠ»Π°Ρ‚ΠΊΠ° ΠΎΡ‚ някъдС ΠΏΡ€Π΅Π· 2013 Π³. Π½Π° чипсСт Z87 с Intel Core i7 / Haswell.

  • ΠŸΡ€ΠΎΡ†Π΅ΡΠΎΡ€ с 4 ядра, 8 ΠΏΠΎΡ‚ΠΎΠΊΠ°
  • 32 Π“ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° 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 Ρ„ΡŠΡ€ΠΌΡƒΠ΅Ρ€ Π·Π°Ρ€Π°Π΄ΠΈ:

  1. Π”Π° ΠΌΠΎΠΆΠ΅ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° сС ΠΈΠ·Ρ…Π²ΡŠΡ€Π»ΠΈ Ρ‚ΠΎΠ·ΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ ΠΈ Π΄Π° бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π΄Ρ€ΡƒΠ³.
  2. 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:

ядро: ata1.00: АктивиранС Π½Π° discard_zeroes_data

2 броя NVMe SSD ΠΌΠΎΠ΄Π΅Π»ΠΈ Samsung SSD 970 EVO 500GB.

Π—Π° Ρ‚Π΅Π·ΠΈ SSD Π΅ Π²Π°ΠΆΠ½Π° скоростта Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅/запис ΠΈ Ρ€Π΅ΡΡƒΡ€ΡΡŠΡ‚ Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ. Π Π°Π΄ΠΈΠ°Ρ‚ΠΎΡ€ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π΅Π½. Напълно Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π΅Π½. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай, β€” Ρ‰Π΅ Π³ΠΈ Π·Π°ΠΏΠ΅Ρ‡Π΅Ρ‚Π΅ Π΄ΠΎ Ρ…Ρ€ΡƒΠΏΠΊΠ°Π²Π° ΠΊΠΎΡ€ΠΈΡ‡ΠΊΠ° ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²Π°Ρ‚Π° синхронизация Π½Π° RAID.

АдаптСр StarTech PEX8M2E2 Π·Π° 2 x NVMe SSD с ΠΌΠΎΠ½Ρ‚Π°ΠΆ Π² PCIe 3.0 8x слот. Π’ΠΎΠ²Π° Π΅, ΠΎΡ‚Π½ΠΎΠ²ΠΎ, просто HBA, Π½ΠΎ Π·Π° NVMe. Π Π°Π·Π»ΠΈΡ‡Π°Π²Π° сС ΠΎΡ‚ Π΅Π²Ρ‚ΠΈΠ½ΠΈΡ‚Π΅ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΈ с ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° изискванС Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° PCIe bifurcation ΠΎΡ‚ Π΄ΡŠΠ½Π½Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚ΠΊΠ° Π·Π°Ρ€Π°Π΄ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅Π» PCIe. Π©Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΡ€ΠΈ Π² Π½Π°ΠΉ-старата систСма, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ° PCIe, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ Ρ‚ΠΎΠ²Π° Π΅ x1 PCIe 1.0 слот. Π Π°Π·Π±ΠΈΡ€Π° сС, със ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° скорост. Няма RAID Ρ‚Π°ΠΌ. Няма Π²Π³Ρ€Π°Π΄Π΅Π½ BIOS Π½Π° Π±ΠΎΡ€Π΄Π°. Π’Π°ΠΊΠ° Ρ‡Π΅, Π²Π°ΡˆΠ°Ρ‚Π° систСма магичСски няма Π΄Π° Π½Π°ΡƒΡ‡ΠΈ Π΄Π° сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° ΠΎΡ‚ NVMe, ΠΊΠ°ΠΌΠΎ Π»ΠΈ Π΄Π° ΠΏΡ€Π°Π²ΠΈ NVMe RAID Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π° устройство.

Π’ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ бСшС обусловСн ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° само Π΅Π΄ΠΈΠ½ свободСн 8x PCIe 3.0 Π² систСмата, ΠΈ, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° 2 свободни слота, лСсно сС замСня с Π΄Π²Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ PEX4M2E1 ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС купят навсякъдС Π½Π° Ρ†Π΅Π½Π° ΠΎΡ‚ 600 Ρ€ΡƒΠ±Π»ΠΈ.

ΠžΡ‚ΠΊΠ°Π·ΡŠΡ‚ ΠΎΡ‚ всякакви Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½ΠΈ ΠΈΠ»ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π² чипсСт/Bios RAID-ΠΈ бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ ΠΎΡΡŠΠ·Π½Π°Ρ‚ΠΎ с Ρ†Π΅Π»Ρ‚Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ напълно Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ цялата систСма, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° самитС SSD/HDD, ΠΊΠ°Ρ‚ΠΎ Π·Π°ΠΏΠ°Π·ΠΈΠΌ всички Π΄Π°Π½Π½ΠΈ. Π’ идСалния случай, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΠΌ Π΄ΠΎΡ€ΠΈ инсталираната ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма ΠΏΡ€ΠΈ прСмСстванСто Π½Π° съвсСм Π½ΠΎΠ²ΠΎ/Π΄Ρ€ΡƒΠ³ΠΎ ТСлязо. ΠžΡΠ½ΠΎΠ²Π½ΠΎΡ‚ΠΎ Π΅ Π΄Π° ΠΈΠΌΠ° SATA ΠΈ PCIe ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅. Π’ΠΎΠ²Π° Π΅ ΠΊΠ°Ρ‚ΠΎ live CD ΠΈΠ»ΠΈ Π±ΡƒΡ‚ΡƒΠ΅ΠΌΠ° Ρ„Π»Π°ΡˆΠΊΠ°, само Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡŠΡ€Π·Π° ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΠ±Π΅ΠΌΠ½Π°.

Π₯ΡƒΠΌΠΎΡ€Π—Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΅, β€” понякога Π΅ Π½ΡƒΠΆΠ½ΠΎ спСшно Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ цялото Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° износ. И Π½Π΅ искатС Π΄Π° Π³ΡƒΠ±ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ. Π—Π°Ρ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° всички спомСнати носитСли ΡƒΠ΄ΠΎΠ±Π½ΠΎ сС ΠΏΠΎΠ΄Ρ€Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΠΎ шини Π² отсСк 5.25 ΠΎΡ‚ стандартСн корпус.

И, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π·Π° СкспСримСнти с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π° SSD ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ Π² Linux.

Π₯Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½ΠΈΡ‚Π΅ Ρ€Π΅ΠΉΠ΄ΠΎΠ²Π΅ са скучни. Π’ΠΊΠ»ΡŽΡ‡Π²Π°Ρˆ. Или Ρ€Π°Π±ΠΎΡ‚ΠΈ, ΠΈΠ»ΠΈ Π½Π΅. А с mdadm Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ.

Π‘ΠΎΡ„Ρ‚

По-Ρ€Π°Π½ΠΎ Π½Π° Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π° бСшС инсталиран Debian 8 Jessie, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ близък Π΄ΠΎ EOL. Π‘Π΅ΡˆΠ΅ ΡΡŠΠ±Ρ€Π°Π½ RAID 6 ΠΎΡ‚ ΠΏΠΎ-Π³ΠΎΡ€Π΅ спомСнатитС HDD Π² комбинация с LVM. На Π½Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ…Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини Π² kvm/libvirt.

Въй ΠΊΠ°Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΈΠΌΠ° подходящ ΠΎΠΏΠΈΡ‚ Π² ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‰ΠΈ SATA/NVMe Ρ„Π»Π°ΡˆΠΊΠΈ ΠΈ Π½Π΅ искамС Π΄Π° Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°ΠΌΠ΅ познатия apt шаблон, Π·Π° Ρ†Π΅Π»Π΅Π²Π° систСма бяха ΠΈΠ·Π±Ρ€Π°Π½ΠΈ Ubuntu 18.04, която Π²Π΅Ρ‡Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ стабилна, Π½ΠΎ всС ΠΎΡ‰Π΅ ΠΈΠΌΠ° 3 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π² пСрспСктива.

Π’ спомСнатата систСма са Π½Π°Π»ΠΈΡ‡Π½ΠΈ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ Π·Π° Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€ ΠΎΡ‚ кутията. Никакъв външСн софтуСр ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ няма Π΄Π° Π½ΠΈ трябват.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π·Π° инсталация

Π—Π° инсталацията Π½Π° систСмата Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Ubuntu Desktop. Π‘Π΅Ρ€Π²Π΅Ρ€Π½Π°Ρ‚Π° систСма ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π²Π° ядрСн инсталатор, ΠΊΠΎΠΉΡ‚ΠΎ проявява излишна Π½Π΅ΠΆΠ΅Π»Π°Π½Π° самостоятСлност, Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ вмъквайки UEFI систСмСн дял Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ дисковСтС, разваляйки цялата красота. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, инсталацията ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ само Π² UEFI Ρ€Π΅ΠΆΠΈΠΌ. Няма прСдлоТСния.

Π’ΠΎΠ²Π° Π½Π΅ Π½ΠΈ удовлСтворява.

Π—Π°Ρ‰ΠΎ?Π—Π° съТалСниС, UEFI Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ слабо ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎ с софтуСрСн RAID, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° UEFI ESP дяла Π½Π΅ сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚. Π’ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈΠΌΠ° Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ Π΄Π° сС Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈ ESP дял Π½Π° Ρ„Π»Π°ΡˆΠΊΠ° Π² USB ΠΏΠΎΡ€Ρ‚Π°, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΎΡ‚ΠΊΠ°Π·. Има Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° софтуСрСн mdadm RAID 1 с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ вСрсия 0.9, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΏΡ€Π΅Ρ‡Π°Ρ‚ Π½Π° UEFI BIOS Π΄Π° Π²ΠΈΠΆΠ΄Π° Ρ‚ΠΎΠ·ΠΈ дял, Π½ΠΎ Ρ‚ΠΎΠ²Π° ΠΈΠ·Π΄ΡŠΡ€ΠΆΠ° Π΄ΠΎ щастливия ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ BIOS ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° ОБ Π½Π° Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π° запишС Π½Π΅Ρ‰ΠΎ Π² ESP, забравяйки Π΄Π° синхронизира Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΎΠ³Π»Π΅Π΄Π°Π»Π°.

ОсвСн Ρ‚ΠΎΠ²Π°, UEFI Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ зависи ΠΎΡ‚ NVRAM, която Π½Π΅ Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ Π·Π°Π΅Π΄Π½ΠΎ с дисковСтС Π² Π½ΠΎΠ²Π°Ρ‚Π° систСма, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ част ΠΎΡ‚ Π΄ΡŠΠ½Π½Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚ΠΊΠ°.

Π’Π°ΠΊΠ° Ρ‡Π΅, няма Π΄Π° изобрСтявамС Π½ΠΎΠ² вСлосипСд. Π’Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΡ‚ΠΎΠ², ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ с Π³ΠΎΠ΄ΠΈΠ½ΠΈ дСдовски вСлосипСд, извСстСн днСс ΠΊΠ°Ρ‚ΠΎ Legacy/BIOS boot, носСщ Π³ΠΎΡ€Π΄ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ CSM Π½Π° UEFI-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ систСми. ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ‰Π΅ Π³ΠΎ ΠΈΠ·Π²Π°Π΄ΠΈΠΌ ΠΎΡ‚ Ρ€Π°Ρ„Ρ‚Π°, смаТСм, Π½Π°Π΄Π΄ΡƒΠ΅ΠΌ ΠΊΠΎΠ»Π΅Π»Π°Ρ‚Π° ΠΈ ΠΈΠ·Π±ΡŠΡ€ΡˆΠ΅ΠΌ с Π²Π»Π°ΠΆΠ΅Π½ ΠΏΠ°Ρ€Ρ†Π°Π».

Desktop вСрсията Π½Π° Ubuntu ΡΡŠΡ‰ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС инсталира Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ с Legacy Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‡Π°, Π½ΠΎ Ρ‚ΡƒΠΊ, ΠΊΠ°ΠΊΡ‚ΠΎ сС ΠΊΠ°Π·Π²Π°, ΠΏΠΎΠ½Π΅ ΠΈΠΌΠ° ΠΎΠΏΡ†ΠΈΠΈ.

Π’Π°ΠΊΠ° Ρ‡Π΅, ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π° ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°ΠΌΠ΅ систСмата ΠΎΡ‚ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‰Π°Ρ‚Π° Ρ„Π»Π°ΡˆΠΊΠ° Ubuntu Live. Π©Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ настройвамС ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, ΠΊΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π°. Ако Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΊΠ°Ρ‡Π΅Π½ΠΈ Π½Π° Ρ„Π»Π°ΡˆΠΊΠ°Ρ‚Π°.

Π’Π»ΠΈΠ·Π°ΠΌΠ΅ Π² Desktop срСдата, стартирамС Смулятор Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ, Π΄Π° Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅:

#sudo bash

ΠšΠ°ΠΊβ€¦?Горният Ρ€Π΅Π΄ Π΅ ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅Π½ Ρ‚Ρ€ΠΈΠ³Π΅Ρ€ Π·Π° Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€ΠΈ относно sudo. Π‘ Π±ΠΎΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ΄Π²Π° ΠΈ ΠΏΠΎ-голямаоотговорност. Π’ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π΅ Π΄Π°Π»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° я ΠΏΠΎΠ΅ΠΌΠ΅Ρ‚Π΅. Много Ρ…ΠΎΡ€Π° смятат, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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 дяла. ОсвСн Ρ‚ΠΎΠ²Π° Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π°Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма Π·Π° / (ΠΊΠΎΡ€Π΅Π½), Π±Π΅Π· Π΄Π° забравя Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π·Π° всСки Π΄Ρ€ΡƒΠ³ софтуСр ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ дяловС Π½Π° LVM ΠΈ Π΄Π° сС ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Ρ‚ Π² Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.

Нито изобраТСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, Π½ΠΈΡ‚ΠΎ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ няма Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ Π½Π° Ρ‚Π°Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма.
Π’Π°Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само Π·Π° създаванС Π½Π° ΠΌΠΈΠ³Π½ΠΎΠ²Π΅Π½ΠΈ снимки Π½Π° систСмата Π±Π΅Π· Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, послСдвано ΠΎΡ‚ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ снимки Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π΅Π½ диск с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° send/receive.

ОсвСн Ρ‚ΠΎΠ²Π°, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π° Π΄Π° Π΄ΡŠΡ€ΠΆΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ софтуСр Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° ΠΆΠ΅Π»Π΅Π·ΠΎΡ‚ΠΎ ΠΈ Π΄Π° изпълнява цСлия останал софтуСр във Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ‚Π°ΠΊΠΈΠ²Π° Π½Π΅Ρ‰Π° ΠΊΠ°Ρ‚ΠΎ прСнасочванС Π½Π° GPU ΠΈ PCI-USB хост ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ Π² KVM Ρ‡Ρ€Π΅Π· IOMMU.

На ΠΆΠ΅Π»Π΅Π·ΠΎΡ‚ΠΎ остават само β€” ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ, виртуализация ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅.

Ако ΠΏΠΎΠ²Π΅Ρ‡Π΅ довСряватС ZFS, Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Ρ‚Π΅ са взаимозамСняСми Π·Π° ΡƒΠΊΠ°Π·Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ ΡΡŠΠ·Π½Π°Ρ‚Π΅Π»Π½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΎΠ³Π»Π΅Π΄Π°Π»Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅/ RAID ΠΈ излишно ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π² ZFS, BRTFS ΠΈ LVM.

ΠšΠ°Ρ‚ΠΎ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, BTRFS ΠΈΠΌΠ° свойството Π΄Π° ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° случайно записанитС Π΄Π°Π½Π½ΠΈ Π² послСдоватСлни, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π° скоростта Π½Π° синхронизация Π½Π° снимки / Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия Π½Π° HDD.

НСка ΠΎΡ‚Π½ΠΎΠ²ΠΎ сканирамС всички устройства:

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

НСка сС оглСдамС:

#lsscsi && nvme list
[0:0:0:0] диск ATA Samsung SSD 860 2B6Q /dev/sda
[1:0:0:0] диск ATA Samsung SSD 860 2B6Q /dev/sdb
[2:0:0:0] диск ATA Samsung SSD 860 2B6Q /dev/sdc
[3:0:0:0] диск ATA Samsung SSD 860 2B6Q /dev/sdd
[4:0:0:0] диск ATA Samsung SSD 860 2B6Q /dev/sde
[5:0:0:0] диск ATA Samsung SSD 860 2B6Q /dev/sdf
[6:0:0:0] диск ATA HGST HTS721010A9 A3J0 /dev/sdg
[6:0:1:0] диск ATA HGST HTS721010A9 A3J0 /dev/sdh
[6:0:2:0] диск ATA HGST HTS721010A9 A3J0 /dev/sdi
[6:0:3:0] диск ATA HGST HTS721010A9 A3B0 /dev/sdj
[6:0:4:0] диск ATA HGST HTS721010A9 A3B0 /dev/sdk
[6:0:5:0] диск ATA HGST HTS721010A9 A3B0 /dev/sdl
[6:0:6:0] диск ATA HGST HTS721010A9 A3J0 /dev/sdm
[6:0:7:0] диск ATA HGST HTS721010A9 A3J0 /dev/sdn
Π’ΡŠΠ·Π΅Π» SN МодСл ИмС Π½Π° пространството ИзползванС Π€ΠΎΡ€ΠΌΠ°Ρ‚ ВСрсия Π½Π° FW
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/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. Π”ΠΎΡ€ΠΈ няма Π΄Π° създавамС дяловС. Ако искатС ΠΏΠΎ β€žΠΊΠ°Π½ΠΎΠ½Π°β€œ ΠΈΠ»ΠΈ β€žΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ½ΠΎβ€œ β€” ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π΅Π΄ΠΈΠ½ голям дял, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ HDD.

SATA HDD

Π’ΡƒΠΊ Π½Π΅ трябва Π΄Π° изобрСтявамС ΠΊΠΎΠ»Π΅Π»ΠΎΡ‚ΠΎ. Π©Π΅ създадСм Π΅Π΄ΠΈΠ½ дял Π·Π° всички. Π”ΡΠ»ΡŠΡ‚ Ρ‰Π΅ бъдС създадСн, Π·Π°Ρ‰ΠΎΡ‚ΠΎ BIOS Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π²Π° Ρ‚Π΅Π·ΠΈ дисковС ΠΈ Π΄ΠΎΡ€ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π° Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈ ΠΎΡ‚ тях. По-късно Π΄ΠΎΡ€ΠΈ Ρ‰Π΅ инсталирамС GRUB Π½Π° Ρ‚Π΅Π·ΠΈ дисковС, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ систСмата Π΄Π° успСС.

#cat >hdd.part << EOF
Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚: дяловС
ΠΈΠ΄-Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚: 0x00000000
устройство: /dev/sdg
Π΅Π΄ΠΈΠ½ΠΈΡ†Π°: сСктори

/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 Π½Π° Ρ‚Π΅Π·ΠΈ дисковС Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ. Π’ΠΎΠ²Π° позволява Π΄ΠΎΡ€ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ ΠΏΠΎ Legacy/BIOS ΠΎΡ‚ GPT дисковС.

Но, Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π½Π°ΡˆΠΈΡΡ‚ случай.

Π’ΡƒΠΊ Ρ‰Π΅ създадСм Π΄Π²Π° дяла. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Ρ‰Π΅ бъдС с Ρ€Π°Π·ΠΌΠ΅Ρ€ 1 GB ΠΈ Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° RAID 1 /boot.

Вторият Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° RAID 6 ΠΈ Ρ‰Π΅ Π·Π°Π΅ΠΌΠ° всичкото останало свободно пространство, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ°Π»ΠΊΠ° Π½Π΅Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° област Π² края Π½Π° устройството.

Какво Π΅ Ρ‚Π°Π·ΠΈ Π½Π΅Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° област?Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, Π½Π°ΡˆΠΈΡ‚Π΅ SATA SSD ΠΈΠΌΠ°Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ΅ΠΌ SLC кСш с Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‚ 6 Π΄ΠΎ 78 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°. 6 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ β€žΠ±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎβ€œ Π·Π°Ρ€Π°Π΄ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ β€žΠ³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈβ€œ ΠΈ β€žΠ³ΠΈΠ±ΠΈΠ±Π°ΠΉΡ‚ΠΈβ€œ Π² тСхничСската докумСнтация Π½Π° устройството. ΠžΡΡ‚Π°Π½Π°Π»ΠΈΡ‚Π΅ 72 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° сС прСдоставят Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎΡ‚ΠΎ пространство.

Π’ΡƒΠΊ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ ΠΊΠ΅ΡˆΡŠΡ‚ Π½ΠΈ Π΅ SLC, Π° мястото сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Ρ€Π΅ΠΆΠΈΠΌ 4 bit MLC. ΠšΠΎΠ΅Ρ‚ΠΎ Π·Π° нас Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π·Π° всСки 4 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° свободно пространство Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ само 1 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ SLC кСш.

Π£ΠΌΠ½ΠΎΠΆΠ°Π²Π°ΠΌΠ΅ 72 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° ΠΏΠΎ 4 ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ 288 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°. Π’ΠΎΠ²Π° Π΅ свободното пространство, ΠΊΠΎΠ΅Ρ‚ΠΎ няма Π΄Π° разпрСдСлямС, Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ Π½Π° устройствата Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π° пълно SLC кСша.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π½ΠΈΠ΅ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄ΠΎ 312 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° SLC кСш, ΠΎΠ±Ρ‰ΠΎ ΠΎΡ‚ ΡˆΠ΅ΡΡ‚Ρ‚Π΅ устройства. ΠžΡ‚ всички устройства, 2 Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² RAID Π·Π° излишък.

Π’Π°ΠΊΠΎΠ²Π° количСство кСш Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ рядко Π² Ρ€Π΅Π°Π»Π½Π°Ρ‚Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π΄Π° срСщамС ситуация, Π² която Π·Π°ΠΏΠΈΡΡŠΡ‚ Π½Π΅ Π²Π»ΠΈΠ·Π° Π² кСша. Π’ΠΎΠ²Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄ΠΎΠ±Ρ€Π΅ компСнсира Π½Π°ΠΉ-пСчалния Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ Π½Π° QLC ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° - ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ниската скорост Π½Π° запис, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС записват извън кСша. Ако Π²Π°ΡˆΠΈΡ‚Π΅ натоварвания Π½Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° сС замислитС сСриозно ΠΊΠΎΠ»ΠΊΠΎ дълго Ρ‰Π΅ слуТат Π²Π°ΡˆΠΈΡ‚Π΅ SSD ΠΏΠΎΠ΄ Ρ‚Π°ΠΊΠΎΠ²Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅, Π² контСкста Π½Π° TBW ΠΎΡ‚ спСцификациитС.

#cat >ssd.part << EOF
Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚: дяловС
ΠΈΠ΄-Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚: 0x00000000
устройство: /dev/sda
Π΅Π΄ΠΈΠ½ΠΈΡ†Π°: сСктори

/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

Π—Π°Ρ‰ΠΎ -assume-clean…?Π—Π° Π΄Π° Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ масивитС. Π—Π° Π΄Π²Π°Ρ‚Π° Π½ΠΈΠ²Π° 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

Π—Π°Ρ‰ΠΎ Ρ‚Π°ΠΊΡŠΠ² голям…?Π£Π²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° chunk-size ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ влияС Π½Π° скоростта Π½Π° случайно Ρ‡Π΅Ρ‚Π΅Π½Π΅ с Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π΄ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ chunk-size. Π’ΠΎΠ²Π° сС дълТи Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π΅Π΄Π½Π° опСрация ΠΎΡ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС напълно изпълнСна Π½Π° Π΅Π΄Π½ΠΎ устройство. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π°, IOPS ΠΎΡ‚ всички устройства сС сумира. Π‘ΠΏΠΎΡ€Π΅Π΄ статистиката, 99% ΠΎΡ‚ IO Π½Π΅ Π½Π°Π΄Π²ΠΈΡˆΠ°Π²Π°Ρ‚ 512K.

ΠŸΡ€ΠΈ RAID 6 IOPS Π½Π° запись Π²ΠΈΠ½Π°Π³ΠΈ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ IOPS Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ накопитСля. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ случайном Ρ‡Ρ‚Π΅Π½ΠΈΠΈ IOPS ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС, Ρ‡Π΅ΠΌ Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ накопитСля Π² нСсколько Ρ€Π°Π·, ΠΈ здСсь Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
Автор Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ смысла Π² ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ»ΠΎΡ… Ρƒ RAID 6 ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈ вмСсто этого ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‚ΠΎ, Π² Ρ‡Π΅ΠΌ RAID 6 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя Ρ…ΠΎΡ€ΠΎΡˆΠΎ.
ΠŸΠ»ΠΎΡ…ΡƒΡŽ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ запись RAID 6 ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кэшСм Π½Π° NVMe ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠΈ с thin-provisioning.

ΠœΡ‹ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ 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, ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ кэш LVM-cache, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ LVM-thin, поэтому ΠΌΡ‹ создадим 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, β€” Ρ‚ΠΎΡ‡ΠΊΠ° монтирования /boot, Π€Π‘ β€” BTRFS
  • /dev/root/root (a.k.a /dev/mapper/root-root), β€” Ρ‚ΠΎΡ‡ΠΊΠ° монтирования / (ΠΊΠΎΡ€Π΅Π½ΡŒ), Π€Π‘ β€” BTRFS
  • /dev/root/swap (a.k.a /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

Настроим ΡΠ΅Ρ‚ΡŒ ΠΈ hostname Π² 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 6 Π½Π° 2020 Π³ΠΎΠ΄. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π½Π΅ измСнялось со Π²Ρ€Π΅ΠΌΡ‘Π½ создания Linux ΠΈ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π½Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ.
  • Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ IO Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ/синхронизаций массивов. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши массивы Π½Π΅ застрСвали Π² состоянии бСсконСчной синхронизации ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ максимум IO Π²ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ/синхронизаций массивов. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€Π΅Π²Π° Π²Π°ΡˆΠΈΡ… Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»Π΅ΠΉ Π²ΠΎ врСмя синхронизации/ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ SSD RAID. ОсобСнно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для NVMe. (НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎ Ρ€Π°Π΄ΠΈΠ°Ρ‚ΠΎΡ€Ρ‹? Π― Π½Π΅ ΡˆΡƒΡ‚ΠΈΠ».)
  • Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚Π΅ дискам Ρ‡Π΅Ρ€Π΅Π· APM ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ шпиндСля (HDD) ΠΈ установитС Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ для сна ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² дисков Π½Π° 7 часов. МоТно ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ APM, Ссли ваши диски это ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ (-B 255). ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ диски ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡΡ‚ΡŒ сСкунд. Π—Π°Ρ‚Π΅ΠΌ ОБ попытаСтся ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ дисковый кэш, ΠΈ диски снова раскрутятся, ΠΈ Ρ‚Π°ΠΊ ΠΏΠΎ ΠΊΡ€ΡƒΠ³Ρƒ. Π£ дисков ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ максимальноС количСство раскручиваний шпиндСля. Π’Π°ΠΊΠΎΠΉ простой Ρ†ΠΈΠΊΠ» ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΡƒΠ±ΠΈΡ‚ΡŒ ваши диски Π·Π° ΠΏΠ°Ρ€Ρƒ Π»Π΅Ρ‚. Π­Ρ‚ΠΎ касаСтся Π½Π΅ всСх дисков, Π½ΠΎ наши Β«Π½ΠΎΡƒΡ‚Π±ΡƒΡ‡Π½Ρ‹Π΅Β» нСсомнСнно ΠΏΠΎΡΡ‚Ρ€Π°Π΄Π°ΡŽΡ‚ ΠΈΠ·-Π·Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… настроСк ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈΠ· RAID ΠΊΡ€ΠΈΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ mini-MAID.
  • УстановитС readahead Π½Π° Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ…ΡΡ дисках Π² 1 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ β€” Π΄Π²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°/chunk 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. Π­Ρ‚Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π· с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ subvol.

Π’ связи с этой ΠΆΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ 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 thin ΠΏΡƒΠ»ΠΎΠ²Π΅ ΠΏΡ€ΠΈ достиганС Π½Π° 90% Π·Π°Π΅Ρ‚ΠΎ пространство с 5% ΠΎΡ‚ ΠΎΠ±Π΅ΠΌΠ°.

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ…ΠΌΠ΅ максималното количСство кСш Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π·Π° LVM cache.

Π—Π°Π±Ρ€Π°Π½ΠΈΡ…ΠΌΠ΅ Π½Π° LVM Π΄Π° Ρ‚ΡŠΡ€ΡΠΈ LVM Ρ‚ΠΎΠΌΠΎΠ²Π΅ (PV) Π½Π°:

  • устройства, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ LVM cache (cdata)
  • устройства, ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° LVM cache Π±Π΅Π· кСша (<lv_name>_corig). ВсС ΠΏΠ°ΠΊ, самото ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΎ устройство Ρ‰Π΅ бъдС сканирано ΠΏΡ€Π΅Π· кСша (просто <lv_name>).
  • устройства, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ LVM cache (cmeta)
  • всички устройства Π² VG с ΠΈΠΌΠ΅ images. Π’ΡƒΠΊ Ρ‰Π΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΈ Π½Π° дисковСтС Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ Π½Π΅ искамС LVM Π½Π° хоста Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Ρ‚ΠΎΠΌΠΎΠ²Π΅, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈ Π½Π° гост OS.
  • всички устройства Π² VG с ΠΈΠΌΠ΅ backup. Π’ΡƒΠΊ Ρ‰Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини.
  • всички устройства, Ρ‡ΠΈΠΈΡ‚ΠΎ ΠΈΠΌΠ΅Π½Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ Π½Π° Β«gpvΒ» (guest physical volume)

АктивирахмС ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° DISCARD ΠΏΡ€ΠΈ освобоТдаванС Π½Π° свободно пространство Π½Π° LVM VG. Π‘ΡŠΠ΄Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΈ. Π’ΠΎΠ²Π° Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° LV Π½Π° SSD Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ дълго. ОсобСно Ρ‚ΠΎΠ²Π° сС отнася Π·Π° SSD RAID 6. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΠΎ ΠΏΠ»Π°Π½ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ thin provisioning, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π½Π΅ Π±ΠΈ Π½ΠΈ ΠΏΠΎΠΏΡ€Π΅Ρ‡ΠΈΠ»ΠΎ.

АктуализирайтС ΠΎΠ±Ρ€Π°Π·Π° Π½Π° 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..?Π—Π°Ρ€Π°Π΄ΠΈ ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½Π° самостоятСлност ΠΈ шаловливи Ρ€ΡŠΡ†Π΅.

НС Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΎ, Π°ΠΊΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ RAID-ΠΎΠ²Π΅Ρ‚Π΅ Π΅ Π² Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€Π°Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅. ΠžΠΏΠΈΡ‚Π²Π° сС Π΄Π° Ρ‚ΡŠΡ€ΡΠΈ ОБ Π½Π° дяловС, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π½Π° Ρ‚ΠΎΠ²Π° ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅.

Ако Π²ΠΈ Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ оставитС, Π½ΠΎ ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ всичко ΠΏΠΎ-Π³ΠΎΡ€Π΅. ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π²ΠΈ Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Π·Π° избавянС ΠΎΡ‚ ΡˆΠ°Π»ΠΎΠ²Π»ΠΈΠ²ΠΈΡ‚Π΅ Ρ€ΡŠΡ†Π΅ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°.

Π’ΡƒΠΊ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈΡ…ΠΌΠ΅ Π½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° инсталация. Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° сС рСстартирамС Π² ΠΈΠΌΠ΅Π½Π½ΠΎ инсталирания ОБ. НС забравяйтС Π΄Π° ΠΈΠ·Π²Π°Π΄ΠΈΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΡŠΡ‡Π½ΠΈΡ 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?

Ако Π² VG ΠΈΠΌΠ° няколко PV, Ρ‚ΠΎ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° активация Π½Π° VG всички PV трябва Π΄Π° ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°Ρ‚ (ΠΎΠ½Π»Π°ΠΉΠ½). Π˜Π·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈ LVM RAID, ΠΊΠΎΠΉΡ‚ΠΎ ΡƒΠΌΠΈΡˆΠ»Π΅Π½ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅.

Много искамС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π°ΡΡ‚ΡŠΠΏΠΈ срив (Ρ‡Π΅Ρ‚ΠΈ Π·Π°Π³ΡƒΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ) Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΎΡ‚ RAID 6 масивитС, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Π΄Π° стартира Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ ΠΈ Π΄Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Ρ€Π΅ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

Π—Π° Ρ‚ΠΎΠ²Π°, Π½Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° абстракция Ρ‰Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°ΠΌΠ΅ всСки Ρ‚ΠΈΠΏ физичСски 'носитСл' Π² ΠΎΡ‚Π΄Π΅Π»Π½Π° VG.

Научно ΠΊΠ°Π·Π°Π½ΠΎ, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ RAID масиви ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ 'Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π½Π° надСТдност'. НС Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π΄Π° създавамС ΠΎΠ±Ρ‰Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΎΡ‚ΠΊΠ°Π·, ΡΡŠΠ±ΠΈΡ€Π°ΠΉΠΊΠΈ Π³ΠΈ Π² Π΅Π΄Π½Π° VG.

НаличиСто Π½Π° LVM Π½Π° 'ΠΆΠ΅Π»Π΅Π·Π΅Π½' Π½ΠΈΠ²ΠΎ Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ Π΄Π° нарязвамС ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π° ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ RAID масиви, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΉΠΊΠΈ Π³ΠΈ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½. НапримСр, - Π΄Π° стартирамС Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ bcache + LVM thin, 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. Π‘Π»Π΅Π΄ ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ кСш NVMe SSD Ρ‰Π΅ станат Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ 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

Π—Π°Ρ‰ΠΎ Ρ‚Π°ΠΊΡŠΠ² chunksize..?Π§Ρ€Π΅Π· практичСски СкспСримСнти Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ установи, Ρ‡Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ сС постигат, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Π±Π»ΠΎΠΊΠ° LVM кСш съвпада с Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π±Π»ΠΎΠΊΠ° LVM thin. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-малък Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ конфигурацията сС прСдставя ΠΏΡ€ΠΈ случайна запис.

64k Π΅ минималният Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Π±Π»ΠΎΠΊΠ°, допустим Π·Π° LVM thin.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ с writeback..!Π”Π°. Π’ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ кСш ΠΎΡ‚Π»Π°Π³Π° синхронизацията Π½Π° записа Π½Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ устройство. Π’ΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π² случай Π½Π° Π·Π°Π³ΡƒΠ±Π° Π½Π° кСша, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС загубят Π΄Π°Π½Π½ΠΈ Π½Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ устройство. По-късно Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅ ΠΊΠ°ΠΊΠ²ΠΈ ΠΌΠ΅Ρ€ΠΊΠΈ, освСн NVMe RAID 1, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ Π·Π° компСнсиранС Π½Π° Ρ‚ΠΎΠ·ΠΈ риск.

Π’ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ кСш Π΅ ΠΈΠ·Π±Ρ€Π°Π½ цСлСнасочСно, Π·Π° Π΄Π° компСнсира ниската производитСлност Π½Π° RAID 6 ΠΏΡ€ΠΈ случайна запис.

НСка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ смС постигнали:

#lvs -a -o lv_name,lv_size,devices --units B cache
Устройства LV LSize
[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)

На /dev/data/cache трябва Π΄Π° сС Π½Π°ΠΌΠΈΡ€Π° само [cachedata_corig]. Ако Π½Π΅Ρ‰ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ pvmove.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ кСша ΠΏΡ€ΠΈ нСобходимост с Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:

#lvconvert -y --uncache cache/cachedata

Π’ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ on-line. LVM просто синхронизира кСша Π½Π° диска, ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° Π³ΠΎ ΠΈ ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π° cachedata_corig ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° cachedata.

Настройка Π½Π° LVM thin

ΠŸΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ ΠΎΡ†Π΅Π½ΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎ пространство Ρ‰Π΅ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° LVM thin:

#thin_metadata_size --block-size=64k --pool-size=6terabytes --max-thins=100000 -u bytes
thin_metadata_size - 3385794560 Π±Π°ΠΉΡ‚Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° "--block-size=64kibibytes --pool-size=6terabytes --max-thins=100000"

Π—Π°ΠΊΡ€ΡŠΠ³Π»ΡΠΌΠ΅ Π΄ΠΎ 4 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°: 4294967296B

Π£ΠΌΠ½ΠΎΠΆΠΈΠΌ Π½Π° Π΄Π²Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ 4194304B Π·Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π½Π° LVM PV: 8594128896B
Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ дял Π½Π° NVMe RAID 1, Π·Π° Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ LVM thin ΠΈ тСхния Ρ€Π΅Π·Π΅Ρ€Π²Π΅Π½ ΠΊΠΎΠΏΠΈΠ΅:

#lvcreate -L 8594128896B --name images root

Π—Π°Ρ‰ΠΎ..?Π’ΡƒΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚, Π·Π°Ρ‰ΠΎ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ LVM thin ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ, Π°ΠΊΠΎ Ρ‚Π΅ ΠΏΠ°ΠΊ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ Π½Π° NVMe ΠΈ Ρ‰Π΅ работят Π±ΡŠΡ€Π·ΠΎ.

Бкоростта Ρ‚ΡƒΠΊ Π΅ Π²Π°ΠΆΠ½Π°, Π½ΠΎ Π½Π΅ Π΅ основната ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ Ρ‚Π°ΠΌ, Ρ‡Π΅ ΠΊΠ΅ΡˆΡŠΡ‚ Π΅ Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΎΡ‚ΠΊΠ°Π·. НСщо ΠΌΠΎΠΆΠ΅ Π΄Π° сС случи с Π½Π΅Π³ΠΎ ΠΈ, Π°ΠΊΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ LVM thin са ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ пълна Π·Π°Π³ΡƒΠ±Π° Π½Π° всичко. Π‘Π΅Π· цСлостта Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΡŠΠ½ΠΊΠΈΡ‚Π΅ Ρ‚ΠΎΠΌΠΎΠ²Π΅ Ρ‰Π΅ бъдС практичСски нСвъзмоТно.

ΠšΠ°Ρ‚ΠΎ прСмСстим ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π½Π΅ΠΊΠ΅ΡˆΠΈΡ€Π°Π½, Π½ΠΎ Π±ΡŠΡ€Π· Ρ‚ΠΎΠΌ, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² случай Π½Π° Π·Π°Π³ΡƒΠ±Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° кСша. Π’ Ρ‚ΠΎΠ·ΠΈ случай всички ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈ, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° кСша, Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π²ΡŠΡ‚Ρ€Π΅ Π² Ρ‚ΡŠΠ½ΠΊΠΈΡ‚Π΅ Ρ‚ΠΎΠΌΠΎΠ²Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ улСсни ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° ΠΏΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅. Π‘ голяма вСроятност Ρ‚Π΅Π·ΠΈ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²Π΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ‚Π΅ Π½Π° Π€Π‘.

ОсвСн Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅Π½ снимка Π½Π° Ρ‚ΡŠΠ½ΠΊΠΈΡ Ρ‚ΠΎΠΌ ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΊΠ΅ΡˆΡŠΡ‚ Π΅ Π±ΠΈΠ» напълно синхронизиран ΠΏΠΎΠ½Π΅ вСднъТ, Ρ‚ΠΎ ΠΏΠΎΡ€Π°Π΄ΠΈ особСноститС Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° структура Π½Π° LVM thin, цСлостта Π½Π° снимката Ρ‰Π΅ бъдС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π° Π² случай Π½Π° Π·Π°Π³ΡƒΠ±Π° Π½Π° кСша.

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Π° VG, която Ρ‰Π΅ отговаря Π·Π° thin-provisioning:

#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ОсвСн Π·Π° ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΆΠΈΠΌ, β€” Π΄Π° Π½Π΅ позволява Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π΅Π΄Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина Π΄Π° ΠΈΠ·Ρ‚Π΅ΠΊΠ°Ρ‚ Π² Π΄Ρ€ΡƒΠ³Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΏΡ€ΠΈ ΠΏΡ€Π΅Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° пространството, zeroing Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° скоростта Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ записванС Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ ΠΎΡ‚ 64k. Всяко записванС ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ 64k Π² ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° област Π½Π° Ρ‚ΡŠΠ½ΠΊΠΈΡ Ρ‚ΠΎΠΌ Ρ‰Π΅ бъдС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½ΠΎ Π² 64K, ΠΏΠΎΠ΄Ρ€Π°Π²Π½Π΅Π½ΠΈ ΠΏΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ‚Π° Π½Π° кСша. Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ опСрацията Π΄Π° бъдС изпълнСна изцяло Ρ‡Ρ€Π΅Π· кСша, пропускайки ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ устройство.

ΠŸΡ€Π΅ΠΌΠ΅ΡΡ‚Π΅Ρ‚Π΅ LV Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ PV:

#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
[lvol0_pmspare] 4294967296B /dev/root/images(0)
Ρ‚ΡŠΠ½ΡŠΠΊ ΠΏΡƒΠ» 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 сСкунди. ΠŸΠΎΠ»ΠΎΠ²ΠΈΠ½Π°Ρ‚Π° ΠΎΡ‚ тСстовСтС са Π·Π° запис. Π—Π° 4 сСкунди Π½Π° NVMe ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ. Π”ΠΎ 3 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° Π² сСкунда. Π’Π°ΠΊΠ° Ρ‡Π΅ всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС стартират тСстовСтС Π·Π° запис, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° консумиратС Π΄ΠΎ 216 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ SSD рСсурса.

Π§Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис Π·Π°Π΅Π΄Π½ΠΎ?Π”Π°. ВСстовСтС Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис ΠΈΠΌΠ° смисъл Π΄Π° сС стартират ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ. ОсвСн Ρ‚ΠΎΠ²Π°, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Π΅ всички кСшовС са синхронизирани, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡΡ‚ запис Π΄Π° Π½Π΅ влияС Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Ρ‰Π΅ Π²Π°Ρ€ΠΈΡ€Π°Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ стартиранС ΠΈ послСдващитС Π² зависимост ΠΎΡ‚ Π·Π°ΠΏΡŠΠ»Π½Π΅Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° кСша ΠΈ Ρ‚ΡŠΠ½ΠΊΠΈΡ Ρ‚ΠΎΠΌ, Π° ΡΡŠΡ‰ΠΎ ΠΈ Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π° Π΄Π°Π»ΠΈ систСмата Π΅ успяла Π΄Π° синхронизира ΠΊΠ΅ΡˆΠΎΠ²Π΅Ρ‚Π΅, запълнСни ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎΡ‚ΠΎ стартиранС.

Π’ допълнСниС, ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ скоростта Π½Π° Π²Π΅Ρ‡Π΅ запълнСн Ρ‚ΡŠΠ½ΡŠΠΊ Ρ‚ΠΎΠΌ, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π° снимка. ΠΠ²Ρ‚ΠΎΡ€ΡŠΡ‚ наблюдава, Ρ‡Π΅ случайният запис рязко сС ускорява Π²Π΅Π΄Π½Π°Π³Π° слСд ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π° снимка, особСно ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ΅ΡˆΡŠΡ‚ всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ напълно запълнСн. Π’ΠΎΠ²Π° сС случва Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° сСмантиката copy-on-write Π½Π° записа, подравняванСто Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π½Π° кСша ΠΈ Ρ‚ΡŠΠ½ΠΊΠΈΡ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ случайният запис Π½Π° RAID 6 сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° Π² случайно Ρ‡Π΅Ρ‚Π΅Π½Π΅ с RAID 6 слСдваща запис Π² кСша. Π’ Π½Π°ΡˆΠ°Ρ‚Π° конфигурация случайното Ρ‡Π΅Ρ‚Π΅Π½Π΅ с RAID 6 Π΅ Π΄ΠΎ 6 ΠΏΡŠΡ‚ΠΈ (броят SATA SSD Π² масива) ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΎΡ‚ записа. Въй ΠΊΠ°Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π·Π° CoW сС разпрСдСлят послСдоватСлно ΠΎΡ‚ Ρ‚ΡŠΠ½ΠΊΠΈΡ ΠΏΡƒΠ», Π·Π°ΠΏΠΈΡΡŠΡ‚, Π² голяма стСпСн, ΡΡŠΡ‰ΠΎ сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° Π² послСдоватСлСн.

И Π΄Π²Π΅Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ характСристики ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΈΠ·Π³ΠΎΠ΄Π½ΠΎ.

КСш-Β«ΠΊΠΎΡ…Π΅Ρ€Π΅Π½Ρ‚Π½ΠΈΒ» ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈ снимки

Π—Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ риска ΠΎΡ‚ Π·Π°Π³ΡƒΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ Π² случай Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π°/Π·Π°Π³ΡƒΠ±Π° Π½Π° кСша, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС въвСдС ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π½Π° ротация Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈ снимки, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Ρ‰Π° тяхната цСлостност Π² Ρ‚ΠΎΠ·ΠΈ случай.

На ΠΏΡŠΡ€Π²ΠΎ място, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° Ρ‚ΡŠΠ½ΠΊΠΈΡ‚Π΅ Ρ‚ΠΎΠΌΠΎΠ²Π΅ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π½Π° Π½Π΅ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΎ устройство, ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ цСлостни ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Π·Π°Π³ΡƒΠ±ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ.

БлСдващият Ρ†ΠΈΠΊΡŠΠ» Π½Π° ротация Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈ снимки Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° цСлостта Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈΡ‚Π΅ снимки Π² случай Π½Π° Π·Π°Π³ΡƒΠ±Π° Π½Π° кСша:

  1. Π—Π° всСки Ρ‚ΡŠΠ½ΡŠΠΊ Ρ‚ΠΎΠΌ с ΠΈΠΌΠ΅ <имя> създавамС ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π° снимка с ΠΈΠΌΠ΅ <имя>.cached
  2. НСка Π·Π°Π΄Π°Π΄Π΅ΠΌ migration threshold Π½Π° Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ висока стойност: #lvchange --quiet --cachesettings "migration_threshold=16384" cache/cachedata
  3. Π’ Ρ†ΠΈΠΊΡŠΠ»Π° провСрявамС броя Π½Π° ΠΌΡ€ΡŠΡΠ½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π² кСша: #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' Π΄ΠΎΡ‚ΠΈΠ³Π½Π΅ΠΌ Π½ΡƒΠ»Π°. Ако Π½ΡƒΠ»Π° няма Ρ‚Π²ΡŠΡ€Π΄Π΅ дълго, ΠΌΠΎΠΆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° сС създадС, ΠΊΠ°Ρ‚ΠΎ кСша сС ΠΏΡ€Π΅Π²Π΅Π΄Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ writethrough. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π²Π·Π΅ΠΌΠ°ΠΉΠΊΠΈ ΠΏΠΎΠ΄ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ скоростнитС характСристики Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ масиви SATA ΠΈ NVMe SSD, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ тСхния рСсурс TBW, ΠΈΠ»ΠΈ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΠ»ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΡŠΡ€Π·ΠΎ Π±Π΅Π· промяна Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° кСша, ΠΈΠ»ΠΈ Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅ напълно Ρ‰Π΅ ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ цСлия си рСсурс Π·Π° няколко Π΄Π½ΠΈ. ΠŸΠΎΡ€Π°Π΄ΠΈ ограничСнията Π½Π° рСсурса систСмата ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π΅ Π΅ способна Π΄Π° бъдС ΠΏΠΎΠ΄ 100% Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° записа постоянно. ΠΠ°ΡˆΠΈΡ‚Π΅ NVMe SSD ΠΏΡ€ΠΈ 100% Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° записа напълно ΠΈΠ·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π°Ρ‚ рСсурса Π·Π° 3-4 Π΄Π½ΠΈ. SATA SSD Ρ‰Π΅ ТивСят ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-дълго. Π—Π°Ρ‚ΠΎΠ²Π°, Ρ‰Π΅ считамС, Ρ‡Π΅ основната част ΠΎΡ‚ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠ΄Π²Π° ΠΎΡ‚ Ρ‡Π΅Ρ‚Π΅Π½Π΅, Π° ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° записа ΠΈΠΌΠ°ΠΌΠ΅ относитСлно краткосрочни ΠΈΠ·Π±Π»ΠΈΡ†ΠΈ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ висока активност Π² ΡΡŠΡ‡Π΅Ρ‚Π°Π½ΠΈΠ΅ с ниско срСдно Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅.
  4. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΡƒΠ»ΠΎΠ²ΠΈΠΌ (ΠΈΠ»ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ) Π½ΠΎΠ»ΠΈΡ†Π° β€” ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°ΠΌΠ΅ <ΠΈΠΌΠ΅>.cached Π½Π° <ΠΈΠΌΠ΅>.committed. Π‘Ρ‚Π°Ρ€ΠΎΡ‚ΠΎ <ΠΈΠΌΠ΅>.committed Π² Ρ‚ΠΎΠ·ΠΈ случай ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅.
  5. ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ, Π°ΠΊΠΎ кСша Π΅ запълнСн Π½Π° 100%, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС прСосновСн с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° скрипт, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° бъдС изчистСн. Π‘ ΠΏΠΎΠ»ΡƒΠΏΡ€Π°Π·Π΅Π½ кСш систСмата Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° записа.
  6. Π©Π΅ настроим migration threshold Π½Π° Π½ΡƒΠ»Π°: #lvchange --quiet --cachesettings "migration_threshold=0" cache/cachedata Π’ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‰Π΅ Π·Π°Π±Ρ€Π°Π½ΠΈ синхронизиранСто Π½Π° кСша с основния носитСл.
  7. Π§Π°ΠΊΠ°ΠΌΠ΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π² кСша сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Ρ‚ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ #lvs --rows --reportformat basic --quiet -ocache_dirty_blocks cache/cachedata | awk '{print $2}' ΠΈΠ»ΠΈ Π΄Π° сработи Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.
  8. ΠŸΠΎΠ²Ρ‚Π°Ρ€ΡΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

Π—Π°Ρ‰ΠΎ слоТността с migration threshold…?Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ Ρ‚Π°ΠΌ, Ρ‡Π΅ Π² Ρ€Π΅Π°Π»Π½Π°Ρ‚Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° β€žΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΈΡΡ‚β€œ запис Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½Π΅ Π΅ съвсСм случаСн. Ако смС записали Π½Π΅Ρ‰ΠΎ Π² сСктор с Ρ€Π°Π·ΠΌΠ΅Ρ€ 4 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π°, голяма Π΅ вСроятността Π² Π±Π»ΠΈΠ·ΠΊΠΈΡ‚Π΅ няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ запис Π² ΡΡŠΡ‰ΠΈΡ ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΡΡŠΡΠ΅Π΄Π½ΠΈΡ‚Π΅ (+- 32K) сСктори.

ΠšΠ°Ρ‚ΠΎ Π·Π°Π΄Π°Π΄Π΅ΠΌ migration threshold Π½Π° Π½ΡƒΠ»Π°, ΠΎΡ‚Π»Π°Π³Π°ΠΌΠ΅ синхронизацията Π½Π° записа Π½Π° SATA SSD ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΈΡ€Π°ΠΌΠ΅ няколко ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ Π±Π»ΠΎΠΊ ΠΎΡ‚ 64K Π² кСша. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ спСстявамС рСсурса Π½Π° SATA SSD.

А ΠΊΠΎΠ΄ΡŠΡ‚ къдС..?Π—Π° съТалСниС, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ счита сСбС си Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ‚Π΅Π½ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° bash скриптовС, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ Π½Π° 100% самоук ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠ²Π° β€žgoogle”-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅, Π·Π°Ρ‚ΠΎΠ²Π° смята, Ρ‡Π΅ ΠΎΠ½Π·ΠΈ уТасСн ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π»ΠΈΠ·Π° ΠΎΡ‚ Ρ€ΡŠΡ†Π΅Ρ‚Π΅ ΠΌΡƒ, Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ Π½ΠΈΠΊΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³.

Мисля, Ρ‡Π΅ профСсионалиститС Π² Ρ‚Π°Π·ΠΈ област ΡΡŠΡ‰ΠΎ ΠΌΠΎΠ³Π°Ρ‚ сами Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ цялата описана ΠΏΠΎ-Π³ΠΎΡ€Π΅ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡ€ΠΈ нСобходимост ΠΈ, ΠΌΠΎΠΆΠ΅ Π±ΠΈ, Π΄Π°ΠΆΠ΅ Π΄Π° я оформят красиво във Π²ΠΈΠ΄ Π½Π° systemd сСрвиз, ΠΊΠ°ΠΊΡ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΎΠΏΠΈΡ‚Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ.

Π’Π°Π·ΠΈ нСуслоТнСна схСма Π·Π° ротация Π½Π° снимки Π½ΠΈ позволява Π½Π΅ само постоянно Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π΅Π΄Π½Π° напълно синхронизирана снимка Π½Π° SATA SSD, Π½ΠΎ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° thin_delta Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ са Π±ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ слСд ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ ѝ, ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚Π΅ Π½Π° основнитС Ρ‚ΠΎΠΌΠΎΠ²Π΅, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ опростявайки Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅Ρ‚ΠΎ.

TRIM/DISCARD Π² libvirt/KVM

Въй ΠΊΠ°Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° KVM ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° libvirt, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΠΌ Π½Π°ΡˆΠΈΡ‚Π΅ VM Π½Π΅ само Π΄Π° Π·Π°Π΅ΠΌΠ°Ρ‚ свободно място, Π½ΠΎ ΠΈ Π΄Π° освобоТдават Π½Π΅Π½ΡƒΠΆΠ½ΠΎΡ‚ΠΎ.

Π’ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ Ρ‡Ρ€Π΅Π· Смулация Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° 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'/>


</disk>

<controller type='scsi' index='0' model='virtio-scsi'>
<alias name='scsi0'/>


</controller>

Подобни DISCARD ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΎΡ‚ гостови ОБ сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ LVM, ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ сС освобоТдават ΠΊΠ°ΠΊΡ‚ΠΎ Π² кСша, Ρ‚Π°ΠΊΠ° ΠΈ Π² Ρ‚ΡŠΠ½ΠΊΠΈΡ ΠΏΡƒΠ». Π’ нашия случай, Ρ‚ΠΎΠ²Π° сС случва, основно, ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ, ΠΏΡ€ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° слСдващата снимка.

Π Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° BTRFS

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈ скриптовС с ΠΊΡ€Π°ΠΉΠ½Π° вниматСлност ΠΈ собствСн риск. ΠΠ²Ρ‚ΠΎΡ€ΡŠΡ‚ Π΅ написал Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ сам ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π° сСбС си. Π£Π²Π΅Ρ€Π΅Π½ съм, Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡ‚Π½ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π½Π° Linux ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ костСливи Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‡ΡƒΠΆΠ΄ΠΈ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

БъздавамС Ρ‚ΠΎΠΌ Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΡ‚ΠΎ устройство:

#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 "Π§Π°ΠΊΠ°ΠΌ Π·Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅..."
wait_lock || terminate "НСуспСх ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅. Излизам..."
echo "ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅..."
}

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" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$SOURCE_BASE_PATH Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΎ"
else
echo "$SOURCE_BASE_PATH Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, создаСтся снимок $SOURCE_PATH Π² $SOURCE_BASE_PATH"
btrfs ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ Snapshot -r $SOURCE_PATH $SOURCE_BASE_PATH
sync
if [ -d "$TARGET_BASE_PATH" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$TARGET_BASE_PATH Π½Π°ΠΉΠ΄Π΅Π½, Π½Π΅ синхронизирован с источником... ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅..."
btrfs ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ -c $TARGET_BASE_PATH
sync
Ρ„ΠΈ
Ρ„ΠΈ
if [ -d "$TARGET_BASE_PATH" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$TARGET_BASE_PATH Π½Π°ΠΉΠ΄Π΅Π½"
else
echo "$TARGET_BASE_PATH Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. Бинхронизация с $TARGET_BASE_DIR"
btrfs send $SOURCE_BASE_PATH | btrfs receive $TARGET_BASE_DIR
sync
Ρ„ΠΈ
if [ -d "$SOURCE_PEND_PATH" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$SOURCE_PEND_PATH Π½Π°ΠΉΠ΄Π΅Π½, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅..."
btrfs ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ -c $SOURCE_PEND_PATH
sync
Ρ„ΠΈ
btrfs ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ Snapshot -r $SOURCE_PATH $SOURCE_PEND_PATH
sync
if [ -d "$TARGET_PEND_PATH" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$TARGET_PEND_PATH Π½Π°ΠΉΠ΄Π΅Π½, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅..."
btrfs ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ -c $TARGET_PEND_PATH
sync
Ρ„ΠΈ
echo "ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° $SOURCE_PEND_PATH Π² $TARGET_PEND_PATH"
btrfs send -p $SOURCE_BASE_PATH $SOURCE_PEND_PATH | btrfs receive $TARGET_BASE_DIR
sync
TARGET_DATE_SUFFIX=$(suffix)
btrfs ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ Snapshot -r $TARGET_PEND_PATH "$TARGET_PATH$TARGET_DATE_SUFFIX"
sync
btrfs ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ -c $SOURCE_BASE_PATH
sync
btrfs ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ -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 ΠΏΠΎΠ΄Ρ‚ΠΎΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ -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 "ΠŸΠΎΠΌΠΎΡ‰ΡŒ"
;;
"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 "НичСго.."
;;
esac
) 98>$LOCK_FILE

EOF

Π§Ρ‚ΠΎ Ρ…ΠΎΡ‚ΡŒ ΠΎΠ½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚..?Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ для создания снимков BTRFS ΠΈ ΠΈΡ… копирования Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π€Π‘ посрСдством BTRFS send/recieve.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ запуск ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΈΠΌ, Ρ‚.ΠΊ. Π² Π½Π°Ρ‡Π°Π»Π΅ Π±ΡƒΠ΄ΡƒΡ‚ скопированы всС Π΄Π°Π½Π½Ρ‹Π΅. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ запуски Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‡Π΅Π½ΡŒ быстрыми, Ρ‚.ΠΊ. ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнСния.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ скрипт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΠΈΡ…Π½Π΅ΠΌ Π² 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 Π΄Π½."
$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

Π§Ρ‚ΠΎ ΠΎΠ½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚..?Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈ синхронизируСт Π½Π° backup Π€Π‘ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ снимки пСрСчислСнных BTRFS-Ρ‚ΠΎΠΌΠΎΠ². ПослС этого удаляСт всС снимки созданныС 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 thin

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚ΠΎΠ½ΠΊΠΈΠΉ ΠΏΡƒΠ» Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΌ устройствС:

#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

ΠšΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ скриптовСтС:

Много bash Π²ΡŠΡ‚Ρ€Π΅...#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 "Π§Π°ΠΊΠ°ΠΌ Π·Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅..."
wait_lock || terminate "НСуспСх ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅. Излизам..."
echo "ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅..."
}

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" == "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
(>&2 echo "Source LV is not thin.")
exit 1
Ρ„ΠΈ

if [ "$DIFF_TARGET_POOL" == "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
(>&2 echo "Target LV is not thin.")
exit 1
Ρ„ΠΈ

if [ "$DIFF_SOURCE_POOL" != "$DIFF_TARGET_POOL" ]
Ρ‚ΠΎΠ³Π°Π²Π°
(>&2 echo "Source and target LVs belong to different thin pools.")
exit 1
Ρ„ΠΈ

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" != "-" ]
Ρ‚ΠΎΠ³Π°Π²Π°
(>&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
Ρ„ΠΈ

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" == "-" ]
Ρ‚ΠΎΠ³Π°Π²Π°
(>&2 echo "Failed to create thin pool metadata snapshot.")
exit 1
Ρ„ΠΈ

#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" ]
Ρ‚ΠΎΠ³Π°Π²Π°
ddrescue --quiet --force --input-position=$SYNC_OFFSET_BYTES --output-position=$SYNC_OFFSET_BYTES --size=$SYNC_LENGTH_BYTES "$SYNC_PEND_PATH" "$SYNC_TARGET"
Ρ„ΠΈ

if [ "$SYNC_ACTION" == "discard" ]
Ρ‚ΠΎΠ³Π°Π²Π°
blkdiscard -o $SYNC_OFFSET_BYTES -l $SYNC_LENGTH_BYTES "$SYNC_TARGET"
Ρ„ΠΈ
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" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$DISCARD_LV_PATH found"
else
echo "$DISCARD_LV not found in $DISCARD_VG"
exit 1
Ρ„ΠΈ
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" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
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" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
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
Ρ„ΠΈ
Ρ„ΠΈ
SOURCE_BASE_SIZE=$(read_lv_size "$SOURCE_VG" "$SOURCE_BASE_LV")
if [ "$TARGET_BASE_LV_PATH" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
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
Ρ„ΠΈ
if [ "$SOURCE_PEND_LV_PATH" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$SOURCE_PEND_LV_PATH found removing..."
lvremove -y --quiet "$SOURCE_PEND_LV_PATH" || exit 1
sync
Ρ„ΠΈ
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" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$TARGET_PEND_LV_PATH found removing..."
lvremove -y --quiet $TARGET_PEND_LV_PATH
sync
Ρ„ΠΈ
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" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$SOURCE_BASE_LV_PATH found"
else
echo "$SOURCE_BASE_LV_PATH not found"
exit 1
Ρ„ΠΈ
if [ "$TARGET_BASE_LV_PATH" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$TARGET_BASE_LV_PATH found"
else
echo "$TARGET_BASE_LV_PATH not found"
exit 1
Ρ„ΠΈ
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" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$SOURCE_BASE_LV_PATH found"
else
echo "$SOURCE_BASE_LV_PATH not found"
exit 1
Ρ„ΠΈ
if [ "$TARGET_BASE_LV_PATH" != "" ]
Ρ‚ΠΎΠ³Π°Π²Π°
echo "$TARGET_BASE_LV_PATH found"
else
echo "$TARGET_BASE_LV_PATH not found"
exit 1
Ρ„ΠΈ
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=""
Ρ„ΠΈ
Π³ΠΎΡ‚ΠΎΠ²ΠΎ
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 "ΠŸΠΎΠΌΠΎΡ‰ΡŒ"
;;
"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 "НичСго.."
;;
esac
) 98>$LOCK_FILE

EOF

Какво прави…?Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΡŠΠ½ΠΊΠΈ снимки ΠΈ синхронизиранС Π½Π° Ρ€Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π΅ Ρ‚ΡŠΠ½ΠΊΠΈ снимки, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ Ρ‡Ρ€Π΅Π· thin_delta, Π½Π° Π΄Ρ€ΡƒΠ³ΠΎ Π±Π»ΠΎΡ‡Π½ΠΎ устройство с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ddrescue ΠΈ blkdiscard.

ΠžΡ‰Π΅ Π΅Π΄ΠΈΠ½ скрипт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ поставим Π² cron:

ΠžΡ‰Π΅ ΠΌΠ°Π»ΠΊΠΎ bash#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 Π΄Π½ΠΈ"

$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 thin Π·Π½Π°Π΅ΠΌ ΠΊΠΎΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ дСйствитСлно сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ сС ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ само Ρ€Π΅Π°Π»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π½Π° Ρ‚ΡŠΠ½ΠΊΠΈΡ‚Π΅ Ρ‚ΠΎΠΌΠΎΠ²Π΅.

Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ изпълнСния Ρ‰Π΅ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ Π΄Π°Π½Π½ΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° прослСдяванСто Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π· ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° LVM thin.

НСка Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ:

#time /root/btrfs-backup/cron-daily.sh
Ρ€Π΅Π°Π»Π½ΠΈ 0ΠΌ2,967с
ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» 0ΠΌ0,225с
систСма 0ΠΌ0,353с

#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 .@snap.2020-03-06-09-39-37
drwxr-xr-x 1 root root 516 ΠΌΠ°Ρ€ 6 09:39 .@snap.2020-03-06-09-39-57
...
/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 @home.@snap.2020-03-06-09-39-35
drwxr-xr-x 1 root root 22 ΠΌΠ°Ρ€ 6 09:39 @home.@snap.2020-03-06-09-39-57
...
drwxr-xr-x 1 root root 240 ΠΌΠ°Ρ€ 6 09:39 @.@snap.2020-03-06-09-39-26
drwxr-xr-x 1 root root 240 ΠΌΠ°Ρ€ 6 09:39 @.@snap.2020-03-06-09-39-56
...

#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 Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ VG. LVM ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ рСкурсивСн, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΌΠ°Ρ‚Ρ€ΡŒΠΎΡˆΠΊΠΈΡ‚Π΅. Π’ΠΎΠ²Π° Π΄Π°Π²Π° Π½Π° LVM ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½Π° Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚.

P.S.

Π’ слСдващата статия Ρ‰Π΅ ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ няколко ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ Π‘Π₯Π”/KVM ΠΊΠ°Ρ‚ΠΎ основа Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³Π΅ΠΎ-распрСдСлСн storage/vm-ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€Π°Π½Π΅ Π½Π° няколко ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Π½Ρ‚Π° Ρ‡Ρ€Π΅Π· домашни дСсктопи, домашСн ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ P2P ΠΌΡ€Π΅ΠΆΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster