BTRFS के साथ Tiered भंडारण - यह कैसे किया जाता है?

Dec 08 2020

NETGEAR अपने रेडीनास ओएस में BTRFS का उपयोग करता है, और अपने नवीनतम संस्करणों में Tiered Storage को लागू करता है। उन्होंने केवल रेडीएएनएएस v6.9 में "मेटाडेटा" टियर के साथ शुरुआत की, और फिर v6.10 में "डेटा टियर" जोड़ा। प्रणाली में SSDs का उपयोग Tier-0 के रूप में किया जाता है ताकि सिस्टम में धीमी HDDs तक पहुंच को गति दी जा सके। सिस्टम का वर्णन बताता है कि मेटाडेटा दोनों मामलों में SSDs पर रहेगा, और "डेटा टियर" मामले में भी नया लिखित डेटा पहले SSDs में जाएगा, और फिर बाद में समय-समय पर HDD में माइग्रेट हो जाएगा, या जब SSD टियर एक निर्दिष्ट स्तर तक भर जाता है।

रेडीनास अपने सामान्य इंस्टॉल में RAID-एड HDD के शीर्ष पर BTRFS का उपयोग करता है - जैसे कि मेरे सिस्टम में 4 डिस्क से बना एक RAID5 है, जिसे BTRFS एकल डिवाइस के रूप में देखता / उपयोग करता है।

यह देखते हुए कि तेरिंग को कैसे लागू किया जाता है, यह "मेटाडेटा" और "डेटा टियर" सेटअप दोनों की तरह दिखता है, एक दूसरे RAID सरणी को जोड़कर, केवल SSDs से बना है, मुख्य HDD RAID सरणी में, और प्रारंभिक एकल-डिवाइस को बदलकर BTRFS एक बहु-डिवाइस एक में।

मैं यह पता नहीं लगा सकता हूं कि माइग्रेशन कैसे किया जाता है, और यह भी कि "मेटाडेटा" मामला डेटा से अलग मेटाडेटा का प्रबंधन कैसे करता है, ताकि केवल मेटाडेटा ही एसएसडी में जाए? इसके अलावा, "डेटा टियर" मोड पूरी तरह से एसएसडी टियर को कैसे लिखता है?

कोई राय?

जवाब

2 StefanPiperov Dec 13 2020 at 09:30

ठीक है, यहाँ मुझे समय-समय पर संतुलन के दौरान क्या हो रहा है:

मेजबान पर निम्नलिखित प्रक्रिया शुरू की गई है:

btrfs balance start -dsweep lt:/dev/md127:7 /data LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DBUS_SESSION_BUS_ADDRESS=unix:path=/var/netatalk/spotlight.ipc TRACKER_USE_CONFIG_FILES=1 TRACKER_USE_LOG_FILES=1 XDG_DATA_HOME=/apps/.xdg/local/share XDG_CONFIG_HOME=/apps/.xdg/config XDG_CACHE_HOME=/apps/.xdg/cache

जहाँ / डेटा मेरे tiered डेटा-वॉल्यूम, / dev / md127 है SSD सरणी बफर / कैश के रूप में उपयोग किया जाता है।

यह प्रक्रिया तब तक चलती है जब तक एसएसडी टियर के डेटा को लगभग पूरी तरह से एचडीडी टियर में स्थानांतरित नहीं किया जाता है - जैसे कि मेरे देखे हुए तरीके से कहीं:

btrfs fi sh /data
Label: '0a44c6bc:data'  uuid: ed150b8f-c986-46d0-ada8-45ee219acbac
    Total devices 2 FS bytes used 393.14GiB
    devid    1 size 7.12TiB used 359.00GiB path /dev/md126
    devid    2 size 114.68GiB used 42.06GiB path /dev/md127

और तब तक यह कम हो जाता है जब तक एसएसडी टियर का उपयोग लगभग शून्य नहीं हो जाता। अजीब बात यह है कि अभी तक मैं इस कमांड को मैन्युअल रूप से चलाने में सक्षम नहीं था।

मैं अभी भी 'स्वीप' बैलेंस फिल्टर का पता नहीं लगा सकता।

यह वही है जो -help दिखाता है:

# btrfs balance start --help
usage: btrfs balance start [options] <path>

    Balance chunks across the devices

    Balance and/or convert (change allocation profile of) chunks that
    passed all filters in a comma-separated list of filters for a
    particular chunk type.  If filter list is not given balance all
    chunks of that type.  In case none of the -d, -m or -s options is
    given balance all chunks in a filesystem. This is potentially
    long operation and the user is warned before this start, with
    a delay to stop it.

    -d[filters]    act on data chunks
    -m[filters]    act on metadata chunks
    -s[filters]    act on system chunks (only under -f)
    -v             be verbose
    -f             force reducing of metadata integrity
    --full-balance do not print warning and do not delay start
    --background|--bg
                   run the balance as a background process

लेकिन यह स्पष्ट नहीं करता है कि यह lt:/dev/md127:7समय-समय पर चलने वाले कमांड के " " हिस्से में कैसे मैप करता है :

btrfs balance start -dsweep lt:/dev/md127:7 /data

यहाँ क्या अर्थ है: जब तक / dev / md127 डेटा उपयोग 7% से कम नहीं हो जाता है तब तक चलाएं?!?

1 Blitzer Dec 09 2020 at 08:13

यह एक क्रोनजॉब होना चाहिए जो नियमित रूप से चलता है और माइग्रेशन करता है।

ऐसी प्रविष्टियों के लिए /etc/cron.d की जाँच करें जो ऐसा कर सकती हैं।

1 zilexa Dec 31 2020 at 08:19

आप कह रहे हैं कि नेटगियर ने ऐसा करने का एक तरीका ढूंढ लिया है जो मर्जरफैस टेरियर कैशिंग आपको पहले से ही करने की अनुमति देता है, एक उपयोगकर्ता के अनुकूल और अत्यंत सरल कॉन्फ़िगरेशन में: https://github.com/trapexit/mergerfs#tiered-caching

  1. SSD ("POOL", tier0) सहित सभी HDD ड्राइव्स के साथ 2 मर्जरफेस पूल A) बनाएं और कम से कम खाली स्थान के साथ डिवाइस पर लिखने के लिए सेट करें (जब तक कि उसके पास खाली स्थान की एक्स राशि न हो)। बी) दूसरा पूल ("POOL-ARCHIVE", tier1) केवल केवल HDDs युक्त है।

  2. आपके उपयोगकर्ता और सभी एप्लिकेशन केवल पहले पूल के पथ का उपयोग करते हैं।

  3. एक रात की स्क्रिप्ट जो सब कुछ कॉपी करती है जो पिछले एक्स दिनों के लिए पहले पूल से दूसरे (आसान नहीं है, क्योंकि ड्राइव समान हैं, यह केवल एसएसडी पर डेटा कॉपी होने का कारण होगा)। यह एकमात्र आइटम है जो दूसरे पूल के पथ का उपयोग करता है।

यह ठीक उसी तरह है जैसे मैंने अपना होमसेवर स्थापित किया है। सभी ड्राइव BtrFS स्वरूपित हैं। मैं (इस समाधान के साथ नहीं कर सकते हैं) RAID का उपयोग करें।

पक्ष:

  1. जब कोई ड्राइव विफल हो जाती है, तो आप केवल उस ड्राइव पर डेटा को ढीला करते हैं (और मैं पहले बैकअप सिस्टम के रूप में SnapRAID का उपयोग करके इसे कम करता हूं)। आप BtrFS-RAID0 के साथ पूरे पूल को ढीला नहीं करते हैं।
  2. यह सेटअप करना बेहद आसान है। आपके / etc / fstab में 2 आरोह। BAM, tiered caching!
  3. आप हमेशा पहले SSD का उपयोग करें (जब तक कि इसमें केवल X राशि शेष खाली स्थान न हो)। आपको अधिकतम गति दे रहा है।

विपक्ष:

  1. आप अपने MergerFS पूल के भीतर BtrFS सबवॉल्म्स (डिस्क में फैले) का उपयोग नहीं कर सकते क्योंकि MergerFS उपयोगकर्ता अंतरिक्ष में फाइल सिस्टम के शीर्ष पर चलता है।
  2. इसका मतलब यह भी है कि आप अपने पूल के भीतर सबवूल्स का स्नैपशॉट नहीं ले सकते। मैं अपने पूल में प्रति उपयोगकर्ता-डेटा फ़ोल्डर में स्नैपशॉट की तरह टाइम मशीन रखना पसंद करूंगा।

मैं अपनी सादगी के लिए मर्जरएफएस से बिल्कुल प्यार करता हूं, लेकिन con # 2 मुझे बहुत दिलचस्पी देता है कि कैसे Netgear ने RTRFS का उपयोग करके एक समान समाधान हैक किया।