Выпуск Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Bcachefs 1.33.0

ΠšΠ΅Π½Ρ‚ ΠžΠ²Π΅Ρ€ΡΡ‚Ρ€ΠΈΡ‚ (Kent Overstreet) ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» выпуск Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Bcachefs 1.33.0. Выпуск ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°: bcachefs-kernel-dkms с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ядра, собираСмым ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ систСмы DKMS (Dynamic Kernel Module Support), ΠΈ bcachefs-tools с запускаСмой Π² пространствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ bcachefs, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для создания (mkfs), монтирования, восстановлСния ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π€Π‘. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ собраны для Debian, Ubuntu, Fedora, openSUSE, NixOS ΠΈ Arch Linux. DKMS-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ядрами Linux, начиная с 6.16.

Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β«reconcileΒ» (rebalance_v2), отмСчСнная ΠΊΠ°ΠΊ ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΠ΅ Π·Π° послСдниС Π΄Π²Π° Π³ΠΎΠ΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π€Π‘. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ€Π°Π½Π΅Π΅ доступного Ρ€Π΅ΠΆΠΈΠΌΠ° Β«rebalanceΒ», ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Β«reconcileΒ» позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ рСбалансировку Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΠΈ), Π½ΠΎ ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² Π€Π‘ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для пСрСноса ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… послС добавлСния Π² ΠΏΡƒΠ» Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ накопитСля). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, reconcile Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ для всСх ΠΎΠΏΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ копирования ΠΈ сТатия. Π’ reconcile Ρ‚Π°ΠΊΠΆΠ΅ автоматичСски ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ измСнСния ΠΎΠΏΡ†ΠΈΠΉ ΠΈΠ»ΠΈ настроСк устройств ΠΈ сразу ΠΏΠ΅Ρ€Π΅Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.

Π’ reconcile задСйствованы ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы для: высокоприоритСтных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ; ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дисковых накопитСлях; Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠΊΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·-Π·Π° Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ мСста). Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° создания Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ (replicas=2) β€” Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ накопитСля ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ автоматичСской Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ диск, Π±Π΅Π· нСобходимости выполнСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π‘Ρ€Π΅Π΄ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Β«reconcile statusΒ» ΠΈ Β«reconcile waitΒ». Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ монтирования Β«mount_trusts_udevΒ» ΠΈ Β«writeback_timeoutΒ». ΠŸΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π² число ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Β«data rereplicateΒ», Β«data job drop_extra_replicasΒ».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ восстановлСния Β«merge_btree_nodesΒ», Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ всСх ΡƒΠ·Π»ΠΎΠ² Π² btree-структурах, ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слияния.
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ΄Π° ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ Π½Π° использованиС языка Rust. Число ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΊΠΎΠ΄Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ goto сокращСно с 2500 Π΄ΠΎ 600. ВмСсто ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² задСйствован макрос DARRAY(), ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡ…ΠΎΠΆΡƒΡŽ динамичСскиС массивы C++ ΠΈ Rust. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок задСйствован макрос try(), заимствованный ΠΈΠ· Rust.
  • Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Β«bcachefs fs usageΒ» обСспСчСно ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎ Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….
  • ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° счётчиков, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Β«bcachefs fs topΒ». Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… счётчиков ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прСобразования Ρ‚ΠΎΡ‡Π΅ΠΊ трассировки (tracepoint) Π² Π±ΡƒΡ„Π΅Ρ€Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° (printbufs).
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΎ качСство сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… сбоСв (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅), дСйствиях для устранСния ошибки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запуска процСсса восстановлСния), ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… устройств ΠΊΠΎΠ΄Π°Ρ… ошибок Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… устройствах. ΠŸΡ€ΠΈ сканировании btree-структур обСспСчСн Π²Ρ‹Π²ΠΎΠ΄ свСдСний ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ возмоТности восстановлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ².
  • ΠŸΡ€ΠΈ записи Π² Π»ΠΎΠ³ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ опрСдСлСния Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² Π½Π° ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ошибок. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π»ΠΈΠΌΠΈΡ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ сообщСний ΠΎΠ± Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… Π½Π° Ρ„ΠΎΠ½Π΅ большого числа сообщСний ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….
  • Для всСх стадий восстановлСния Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ прогрСсса.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Bcachefs развиваСтся файловая систСма, нацСлСнная Π½Π° сочСтаниС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, свойствСнной Btrfs ΠΈ ZFS, ΠΈ уровня ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, надёТности ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ для XFS. Bcachefs ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ возмоТности, ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π» Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… устройств, многослойныС раскладки Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»Π΅ΠΉ (Π½ΠΈΠΆΠ½ΠΈΠΉ слой с часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° Π±Π°Π·Π΅ быстрых SSD, Π° Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ слой с ΠΌΠ΅Π½Π΅Π΅ вострСбованными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· ТСстких дисков), рСпликация (RAID 1/10), ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ΅ сТатиС Π΄Π°Π½Π½Ρ‹Ρ… (Ρ€Π΅ΠΆΠΈΠΌΡ‹ LZ4, gzip ΠΈ ZSTD), срСзы состояния (ΡΠ½Π°ΠΏΡˆΠΎΡ‚Ρ‹), вСрификация цСлостности ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ суммам, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ ошибок Π ΠΈΠ΄Π°β€”Π‘ΠΎΠ»ΠΎΠΌΠΎΠ½Π° (RAID 5/6), Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ChaCha20 ΠΈ Poly1305). По ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Bcachefs ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ Btrfs ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π€Π‘ Π½Π° Π±Π°Π·Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Copy-on-Write, ΠΈ дСмонстрируСт ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π±Π»ΠΈΠ·ΠΊΡƒΡŽ ΠΊ Ext4 ΠΈ XFS.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ