همانطور که می دانید، اگر مشکلی پیش بیاید، قطعاً اتفاق خواهد افتاد. احتمالاً همه مواردی داشته اند که یک فایل مهم اخیر به طور تصادفی پاک شده است یا متنی به طور تصادفی انتخاب شده و در یک ویرایشگر متن از بین رفته است.
اگر میزبان یا صاحب وب سایت هستید، احتمالاً با هک کردن حساب های کاربری یا وب سایت خود مواجه شده اید. در چنین مواردی، بازیابی زمان بندی، یافتن روش ورود و آسیب پذیری مورد استفاده توسط مهاجم مهم است.
سیستم فایل NILFS2 برای حل چنین مشکلاتی عالی است.
از نسخه 2.6.30 در هسته لینوکس وجود دارد.
ویژگی این فایل سیستم این است که شبیه یک سیستم کنترل نسخه است: همیشه می توانید وضعیت سیستم را به عقب برگردانید و نگاه کنید که چند وقت پیش چگونه بود.
برای ارائه این قابلیت، نیازی به پیکربندی اسکریپت های Cron، گرفتن عکس های فوری و غیره ندارید. فایل سیستم NILFS2 این کار را به تنهایی انجام می دهد. هرگز داده های قدیمی را بازنویسی نمی کند و در صورت وجود فضای خالی کافی، همیشه در قسمت های جدید دیسک می نویسد. مطابق با اصل کپی روی نوشتن.
در واقع، هر تغییری در یک فایل به طور خودکار یک عکس فوری جدید از سیستم فایل ایجاد می کند، بنابراین می توانید از این FS به عنوان ماشین زمان استفاده کنید و وضعیت فایل ها را به عقب برگردانید.
داستان
NILFS2 در اعماق توسعه یافت شرکت تلگراف و تلفن نیپوندر واقع این شرکت دولتی (که دارای سهام کنترلی است) و بزرگترین شرکت مخابراتی در ژاپن است. به طور خاص، در آزمایشگاههای فضای مجازی تحت رهبری ریوسکه کونیشی.
دقیقاً برای چه ساخته شده است، ناشناخته است، با این حال، می توان فرض کرد که چنین FS، با عملکرد "ماشین زمان" خود، برای ذخیره داده هایی ایده آل است که سرویس های اطلاعاتی ممکن است بخواهند آنها را به منظور پخش مجدد کل تصویر جستجو کنند. اس ام اس، ایمیل و ....
NILFS2 همچنین به طور بالقوه یک ابزار بسیار ارزشمند برای سرویس های امنیتی داخلی است، زیرا به شما امکان می دهد تمام نامه های حذف شده در پایگاه داده ایمیل را بازیابی کنید و موانع کارمندانی را که ممکن است متعاقباً سعی کنند با حذف یا تغییر فایل های خود پنهان کنند، آشکار می کند.
چگونه می توانید کل سابقه مکاتبات خود را ردیابی کنید؟در سرورهای لینوکس (و این جایی است که NILFS2 باید برای اهداف امنیتی داخلی نصب شود)، روش فایل ذخیره ایمیل ها اغلب برای ذخیره پیام های ایمیل استفاده می شود. به اصطلاح فرمت Maildir. برای قرار دادن کافی است سرور پست الکترونیکی پیک و ذخیره نامه را در Maildir پیکربندی کنید. قالب دیگر mbox یک فایل متنی بزرگ است که به راحتی می توان آن را به پیام های فردی تجزیه کرد.
اگر سرور ایمیل از یک پایگاه داده استفاده می کند، NILFS2 امکان بازیابی زمان دقیق تغییرات پایگاه داده و امکان بازیابی پایگاه داده را در هر یک از این لحظات فراهم می کند. و سپس باید از ابزارهای پایگاه داده استفاده کنید تا ببینید در آن نقطه از زمان چه چیزی در آن وجود دارد ...
با این حال، مشکلی پیش آمد. یا دولت ژاپن نظر خود را در مورد نظارت بر همه تغییر داد (اصل یارووایا) یا عملکرد NILFS2 در هاردهای HDD سنتی پایین تر از حد معمول بود و NILFS2 تحت مجوز GPL منتشر شد و خیلی سریع وارد هسته لینوکس شد. هیچ شکایت خاصی در مورد کد نوشته شده ژاپنی بسیار واجد شرایط وجود نداشت، توسعه دهندگان هسته لینوکس آن را نداشتند.
NILFS2 چگونه است؟
از نقطه نظر استفاده: در یک سیستم کنترل نسخه SVN. هر چک پوینت FS یک تعهد است که بدون اطلاع کاربر هر زمان که تغییری ایجاد شود به صورت خودکار انجام می شود: حذف، تغییر محتوای یک فایل یا تغییر حقوق دسترسی. هر commit یک عدد دارد که به صورت خطی افزایش می یابد.
از دیدگاه یک برنامه نویس: یک بافر دایره ای. سیستم فایل تغییرات را جمع آوری می کند و آنها را در یک تکه تقریباً 8 مگابایت می نویسد (2000 * 4096، که در آن 2000 تعداد عناصر در بلوک و 4096 اندازه صفحه حافظه است). کل دیسک به چنین تکه هایی تقسیم می شود. ضبط به صورت متوالی انجام می شود. وقتی فضای خالی تمام شود، قدیمیترین عکسهای فوری حذف میشوند و تکهها بازنویسی میشوند.
وسایل اولیه NILFS2
نسخه سازی!!!
روش بازیابی یک سیستم فایل پس از خرابی ساده است: هنگام بارگیری، آخرین تکه ای که دارای چک جمع صحیح است جستجو می شود و یک سوپر بلوک روی آن نصب می شود. این یک عملیات تقریباً فوری است.
با توجه به این واقعیت که ضبط همیشه به صورت خطی انجام می شود، پس:
می تواند نتایج خوبی را هنگام اجرا بر روی یک SSD با نوشتن تصادفی کند نشان دهد.
NILFS2 منبع SSD را ذخیره می کند، زیرا تقریباً هیچ ضریب ضرب نوشتن وجود ندارد. به طور دقیق تر، 2 بیشتر نیست.واقعیت این است که هنگام بازنویسی چرخه ای کل دیسک، NILFS2 داده های غیرقابل تغییر را به قطعات جدید (تکه ها) منتقل می کند.
اگر 10 درصد داده های بدون تغییر روی دیسک داشته باشیم، با 10 بازنویسی کامل، 1 درصد افزایش نوشتن را دریافت خواهیم کرد. خوب، افزایش 50٪ در پر بودن 50٪ دستگاه برای 1 بازنویسی کامل دیسک.
حداکثر بهره نوشتن 2 است. این بسیار کم است با توجه به اینکه همه چیز به ترتیب نوشته شده است. به طور کلی، انیمیشن نوشتن کمتر از یک سیستم فایل تکه تکه معمولی با بخش 4096 بایتی خواهد بود. (فکری با الهام از اظهار نظر).
سهولت بالقوه اجرای تکرار به یک NILFS2 FS راه دور
NILFS2 برای /home
در سیستم عامل های مشابه یونیکس، به عنوان یک قاعده، یک پوشه /home وجود دارد که اطلاعات کاربر در آن ذخیره می شود. برنامه های مختلف تنظیمات مربوط به کاربر خود را در این پوشه ذخیره می کنند.
و چه کسی، اگر نه کاربران، اغلب اشتباه می کند؟ بنابراین، همانطور که می گویند، خود خداوند دستور استفاده از NILFS2 را در /home داده است.
علاوه بر این، با استفاده گسترده از SSD ها، اکنون دیگر لازم نیست در مورد استفاده از سیستم فایل CoW نگران کاهش شدید سیستم باشیم.
بله، ما میتوانیم هر چند وقت یکبار که دوست داریم در ZFS و BTRFS اسنپشاتهای FS ایجاد کنیم، اما همیشه این خطر وجود دارد که تغییر فایل از دست رفته بین عکسهای فوری پایان یابد. و تصاویر هنوز باید مدیریت شوند: عکس های قدیمی باید حذف شوند. در NILFS2، همه اینها به طور خودکار، به معنای واقعی کلمه هر چند ثانیه یکبار اتفاق میافتد.
من یک حجم منطقی با استفاده از lvcreate ایجاد کردم (در گروه حجم nvme، thin pool thin). من توصیه می کنم آن را در حجم lvm ایجاد کنید، زیرا بعداً می توان آن را به راحتی گسترش داد. من توصیه می کنم 50٪ فضای دیسک رایگان با NILFS2 برای عمق نسخه مناسب داشته باشید.
lvcreate -V10G -T nvme/thin -n home
و آن را در NILFS2 فرمت کرد:
mkfs.nilfs2 -L nvme_home /dev/nvme/home
mkfs.nilfs2 (nilfs-utils 2.1.5)
Start writing file system initial data to the device
Blocksize:4096 Device:/dev/nvme/home1 Device Size:10737418240
File system initialization succeeded !!
پس از این، باید تمام داده ها را از /home فعلی کپی کنید.
من این کار را بلافاصله پس از بوت کردن کامپیوتر، قبل از ورود به حساب کاربری خود به عنوان کاربر اصلی انجام دادم. اگر بخواهم به عنوان کاربر وارد شوم، برخی از برنامهها سوکتها و فایلها را در پوشه /home/user کاربر من باز میکنند، که کپی کردن پاک را دشوار میکند. همانطور که می دانید پوشه home برای کاربر root معمولا در مسیر /root قرار دارد، بنابراین هیچ فایلی در پارتیشن /home باز نمی شود.
mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome
گزینه noatime برای بهبود عملکرد مورد نیاز است تا زمان با هر دسترسی به فایل تغییر نکند. بعد راه اندازی مجدد می کنیم.
انواع تصاویر در NILFS2.
یک عکس فوری معمولی بدون مصونیت در برابر حذف، ایست بازرسی یا نقطه بازیابی نامیده می شود.
یک عکس فوری محافظت شده از حذف خودکار یک عکس فوری نامیده می شود، سپس به سادگی یک عکس فوری است.
مشاهده چک پوینت ها با استفاده از دستور lscp انجام می شود
مشاهده عکس های فوری lscp -s
ما میتوانیم خودمان در هر زمانی عکسهای فوری و نقاط بازرسی ایجاد کنیم با استفاده از:
mkcp [-s] устройство
ما داده ها را بازیابی می کنیم.
NILFS به ما این امکان را می دهد که به موازات کار با شاخه اصلی FS، هر تعداد عکس قدیمی را که می خواهیم نصب کنیم. اما فقط در حالت خواندن.
همه چیز به این ترتیب تنظیم شده است. چک پوینتهای منظمی که NILFS2 ایجاد میکند، میتوانند به طور خودکار در هر زمان حذف شوند (زمانی که فضای دیسک تمام شود یا طبق قوانین nilfs_cleanrd)، بنابراین قبل از نصب باید نقطه بازرسی را به یک عکس فوری تبدیل کنیم یا به زبان روسی، عکس فوری را بگیریم.
chcp ss номер_чекпоинта
پس از آن، ما می توانیم عکس فوری را به عنوان مثال به صورت زیر نصب کنیم:
mount -t nilfs2 -r -o cp=номер_чекпоинта /dev/nvme/home /mnt/nilfs/номер_чекпоинта
پس از آن فایل های بازیابی شده را از عکس فوری در /home کپی می کنیم.
و متعاقباً پرچم غیرقابل حذف را از عکس فوری حذف می کنیم تا در آینده جمع کننده خودکار زباله بتواند داده های قدیمی را حذف کند:
chcp cp номер_чекпоинта
ابزارهای کمکی برای NILFS2
اما مشکل این است. بله، البته، ما می توانیم یک سیستم فایل ایجاد کنیم، اندازه آن را به صورت آنلاین تغییر دهیم، لیست چالش ها را مشاهده کنیم، آنها را ایجاد و حذف کنیم. پکیج nilfs2-utils یک ست جنتلمن مینیمال را ارائه می دهد.
از آنجایی که NTT بودجه خود را محدود کرده است، هیچ ابزار سریع سطح پایینی وجود ندارد که به شما امکان نمایش تاریخچه تغییرات فایل یا ایجاد تفاوت بین عکس های فوری را بدهد.
ابزار n2u من
برای پر کردن این خلاء نوشتم ابزار n2u شما، که می تواند تاریخچه تغییرات یک فایل/دایرکتوری خاص را نمایش دهد:
n2u log filename
خروجی چیزی شبیه به این است:
CHECKPOINT DATE TIME TYPE SIZE MODE
1787552 2019-11-24 22:08:00 first 7079 cp
1792659 2019-11-25 23:09:05 changed 7081 cp
برای روش پیادهسازی انتخاب شده بسیار سریع کار میکند: با استفاده از روش دوبخشی به دنبال تفاوت بین فایلها میگردد، به سرعت فایل/دایرکتوری را در عکسهای فوری مختلف نصب و مقایسه میکند.
با استفاده از کلید می توانید محدوده ای از نقاط بازرسی را تنظیم کنید -cp CP1:CP2 یا -cp {YEAR-MM-DD}:{YEAR-MM-DD}.
همچنین می توانید تفاوت بین نقاط بازرسی را برای یک فایل یا فهرست خاص مشاهده کنید:
n2u diff -r cp1:cp2 filename
میتوانید کل گاهشماری تغییرات را نمایش دهید: تمام تفاوتهای بین نقاط بازرسی یک فایل/دایرکتوری خاص:
n2u blame [-r cp1:cp2] filename
فاصله تاریخ در این دستور نیز پشتیبانی می شود.
گریه ای برای توسعه دهندگان
متخصصان زیادی در Habré وجود دارد. لطفا NILFS2 را تمام کنید. ایجاد تکرار، تفاوت سریع سطح پایین بین ویرایشها، پیوند مجدد و سایر موارد خوب!