उबंटू और btrfs पर आधारित दोष-सहिष्णु प्रणाली

एक गीक के रूप में, मुझे अभी भी सिस्टम के साथ लगातार प्रयोग करने की आदत है: पुनर्निर्माण, अस्थिर आरसी कर्नेल स्थापित करें, प्रयोगात्मक अपडेट शाखाएं सक्षम करें। अक्सर, मैं कहता हूं कि सिस्टम को अक्सर तोड़ना होगा (मेरा व्यक्तिगत रिकॉर्ड, पुनर्स्थापना के बिना 2 सप्ताह)।

टूटने का क्या मतलब है? जब कुछ बहुत बुरी तरह से काम करता है, उदाहरण के लिए, अक्सर लिबरऑफिस और कॉम्पिज़ दुर्घटनाग्रस्त हो जाता है जो लटका पसंद करता है, मैं सिस्टम को फिर से कॉन्फ़िगर करने की कोशिश करता हूं, लेकिन यह लंबे और उबाऊ है।

दरअसल, मैं किस चीज की ओर अग्रसर हूं।

अगर मेरे जैसा कोई व्यक्ति सिस्टम के साथ प्रयोग करना पसंद करता है और हर बार इसे बहाल करने से थक जाता है, तो यहां मेरे लिए एक विकल्प है क्योंकि मैंने अपने लिए इस समस्या को हल किया है। मैं बिल्ली के नीचे चलता हूं।

कैसे या एक और बाइक के लिए।

आइटम 1: LiveCD


फैक्टम के बाद, हम मानते हैं कि डिस्क को 2 भागों में विभाजित किया गया है: / बूट को ext4 में स्वरूपित किया गया और btrfs में स्वरूपित किया गया।
MBR में डिस्क पर ग्रब 2 लिखा होता है।
तदनुसार, पहला पैराग्राफ:
व्यक्तिगत आदतों और विचारों से, एक काली स्क्रीन को निहारने और कभी-कभी इंटरनेट तक पहुंच के बिना, याद रखने और आदेशों को लिखने की तुलना में ग्राफिकल इंटरफ़ेस से सिस्टम को पुनर्स्थापित करना बहुत आसान है। नहीं, मुझे नहीं लगता कि कंसोल बुराई है, मैं कंसोल को प्यार करता हूं, लेकिन वैसे भी, यह जीयूआई से अधिक सुखद है।

एक कार्रवाई

यह विचार नया नहीं है, मैं मानता हूं कि यह कहीं न कहीं हब पर लगा हुआ है, लेकिन मुझे लिंक नहीं मिला, इसलिए मैं प्रकाशन के स्रोत से माफी मांगता हूं।
वांछित लाइव डिस्ट्रो की छवि को / बूट फ़ोल्डर में कॉपी करें
sudo cp /media/timofey/boot/grub/ISO/Linux/Ubuntu/ubuntu-12.10-desktop-amd64.iso /boot/ubuntu-12.10-desktop-amd64.iso
/ बूट को एक अलग विभाजन में ले जाया गया है, इसलिए नहीं कि यह बेहतर है, बल्कि इसलिए कि मेरे लिए अज्ञात कारणों से, ग्रुब 2 के तहत btrfs को लिखे गए LiveCDs लोड नहीं हैं।
अब हम डिफ़ॉल्ट ग्रब 2 सेटिंग्स को सही करते हैं ताकि ग्रब को अपडेट करते समय, छवि को न खोएं।
sudo nano /etc/grub.d/40_custom

और टिप्पणियों के बाद वहां कुछ समान डालें:
 menuentry "Ubuntu 12.10 amd64" { set isofile=/ubuntu-12.10-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noeject noprompt -- initrd (loop)/casper/initrd.lz } 


वास्तव में, छवि और समानता में, इसे कॉन्फ़िगर किया गया था (आधिकारिक विकी ubuntu):
/ Grub2 / ISOBoot
अब "लगभग" सबसे महत्वपूर्ण, हम फिर से विन्यास उत्पन्न करते हैं:

sudo update-grub

यही कारण है कि, अब शिफ्ट कुंजी को फिर से शुरू करने के बाद, हम मुख्य प्रणाली की स्थिति की परवाह किए बिना इंटरनेट और एक ग्राफिकल इंटरफ़ेस के साथ मिनी-सिस्टम शुरू कर सकते हैं।

आइटम 2: चित्र


मुझे लगता है कि कोई भी व्यक्ति जो काफी समय से लिनक्स से परिचित है, कम से कम btrfs के बारे में सुना है, शायद पहले से ही अपनी राय बना रहे हैं। Ubuntu को btrfs के साथ विभाजन पर स्थापित करते समय, यह डिफ़ॉल्ट रूप से बहुत बुद्धिमान है, उप-विभाजन तंत्र का उपयोग किया जाता है, और 2 उप-विभाजन बनाए जाते हैं, ये क्रमशः @ और घर हैं (जो मैं / और / घर बदल देता हूं), जब हम सिस्टम को पुन: स्थापित करते हैं, तो हम कॉन्फ़िगरेशन को नहीं खोते हैं। लेकिन अब उस बारे में नहीं है। अंत उपयोगकर्ताओं के लिए इस देखभाल का उपयोग कैसे करें? बहुत सरल है।

थोड़ा पृष्ठभूमि:
यह मूल रूप से स्क्रिप्ट को rc.local के माध्यम से निष्पादित करने की योजना बनाई गई थी, लेकिन इसे निष्पादित नहीं किया गया था, फिर इसे क्रोन दैनिक के माध्यम से लागू किया गया था, बाद में मैंने rc.local को हराया और क्रॉन में नरक में स्नैपशॉट को अक्षम कर दिया।

स्क्रिप्ट कोड:

 #!/bin/bash #This script for autocreating snapshot on startup #Version 1.2.9 set -e DATA="$(date +%g%m%d%k%M%S)" VOLUME=/dev/sda1 [ ! -d "/tmp/$DATA/" ] && sudo mkdir "/tmp/$DATA/" mount $VOLUME "/tmp/$DATA/" && { [ ! -d "/tmp/$DATA/snapshots/" ] && sudo mkdir "/tmp/$DATA/snapshots/" mkdir "/tmp/$DATA/snapshots/$DATA/" && cd "/tmp/$DATA/" btrfs subvolume snapshot ./@ ."/snapshots/$DATA/@_${DATA}/" btrfs subvolume snapshot ./@home ."/snapshots/$DATA/@home_${DATA}/" [ ! -f ./snapshots/snapshots.log ] && touch ./snapshots/snapshots.log chmod 777 ./snapshots/snapshots.log echo on_startup_$(date +%X_%x) >> ./snapshots/snapshots.log umount -l "/tmp/$DATA/" && sudo rmdir "/tmp/$DATA/" } 


यह / etc / btrfs_snapshot_onstartup पर स्थित है
इसे /etc/rc.local में जोड़ें और sudo chmod + x "फ़ाइल मार्ग" के माध्यम से दोनों फाइलों को निष्पादित अधिकार प्रदान करें।
निष्पादन लॉगिंग ./snapshots/snapshots.log फ़ाइल में काम नहीं कर सकता है, तो आपको इसे रूट अधिकारों के तहत मैन्युअल रूप से बनाने की आवश्यकता है। रिबूट के बाद, वह स्वयं आवश्यक अधिकार प्राप्त करेगा।

किसी भी समय, हम टाइप करके सिस्टम स्नैपशॉट की स्थिति देख सकते हैं:
cat /var/log/snapshots.log

सभी छवियों को स्नैपशॉट फ़ोल्डर में सिस्टम अनुभाग में जोड़ा जाता है, जहां प्रत्येक सफल सिस्टम स्टार्टअप के लिए एक फ़ोल्डर बनाया जाता है।
कुछ लोग कह सकते हैं कि यह भुगतान नहीं करता है, स्टार्टअप के दौरान स्नैपशॉट बना रहा है। इससे दूर, यह उचित है कि एक दिन में मैं सिस्टम में बहुत सारे बदलाव कर सकता हूं और इसे एक सौ बार फिर से शुरू कर सकता हूं, और वैकल्पिक मामलों में मैं एक सफल (वास्तविक) लॉन्च के क्षण में नहीं लौट सकता, लेकिन केवल एक दिन पहले।

मैन्युअल रूप से शुरू करने का विकल्प:
 #!/bin/bash #This script for autocreating snapshot #Version 1.2.8 set -e DATA=$(date +%g%m%d%k%M%S) ################################## [ ! -d /tmp/$DATA/ ] && sudo mkdir /tmp/$DATA/ sudo mount /dev/sda2 /tmp/$DATA/ && { #################################################################### [ ! -d /tmp/$DATA/snapshots/ ] && mkdir /tmp/$DATA/snapshots/ mkdir /tmp/$DATA/snapshots/$DATA/ cd /tmp/$DATA/ sudo btrfs subvolume snapshot ./@ ./snapshots/$DATA/@_${DATA}/ sudo btrfs subvolume snapshot ./@home ./snapshots/$DATA/@home_${DATA}/ #################################################################### sudo chmod 777 ./snapshots/snapshots.log sudo echo this.hands_$(date +%X_%x) >> ./snapshots/snapshots.log sudo cat ./snapshots/snapshots.log sleep 1 sudo umount -l /tmp/$DATA/ && sudo rmdir /tmp/$DATA/ #################################################################### sudo btrfs filesystem df / #information about fs } read exit 0 


आइटम 3: रिकवरी


इसलिए, जो उन्होंने कोशिश की, उसके लिए उन्होंने सिस्टम को मार दिया, मुझे क्या करना चाहिए?
हम LiveCD से बूट करते हैं, सिस्टम विभाजन को हमारे लिए सुविधाजनक फ़ोल्डर में माउंट करते हैं।
फिर, यदि आवश्यक हो, तो मानक सबवू @ और घर को छिपाएं या हटाएं।
और इसे गायब स्नैपशॉट के साथ बदलें।
ज्यादातर मामलों में, @ की जगह पर्याप्त है।
nazarpc
स्नैपशॉट्स न केवल सिस्टम की एक निश्चित स्थिति में वापस रोल करने की अनुमति देते हैं, बल्कि आवश्यक फ़ाइल या इसे से कॉन्फ़िगर करने के लिए भी है, जो अज्ञात मूल की फ़ाइलों को हटाने के दौरान कुछ स्वतंत्रता भी देता है।


आइटम 4: सफाई


स्नैपशॉट बहुत जगह नहीं लेते हैं, लेकिन समय के साथ, डिस्क की एक बड़ी मात्रा उनके कारण डिस्क पर जमा हो सकती है। यहां स्नैपशॉट के साथ फ़ोल्डर्स को स्वचालित रूप से साफ़ करने के लिए एक स्क्रिप्ट है। यह सभी सिस्टम स्नैपशॉट को हटा देता है।

 #!/bin/bash #Version 0.0.9 set -e DATA=$(date +%g%m%d%k%M%S) [ ! -d "/tmp/$DATA" ] && sudo mkdir "/tmp/$DATA" sudo mount /dev/sda1 "/tmp/$DATA" && { cd "/tmp/$DATA/snapshots/" for i in */* do sudo btrfs subvolume delete "$i" done for i in * do sudo rmdir -v "$i" done echo cleanup_$(date +%g%m%d%k%M%S) > "./snapshots.log" sudo cp "./snapshots.log" '/var/log/snapshots.log' sudo umount -l "/tmp/$DATA" && sudo rmdir "/tmp/$DATA" } read exit 0 


परिणाम


हमने एक अपेक्षाकृत दोष-सहिष्णु प्रणाली बनाई है जिसमें हम विफलता के बाद प्रणाली को जल्दी से बहाल करने में सक्षम हैं। एक ही समय में एक सुरक्षात्मक प्रणाली बनाने के लिए न्यूनतम समय और प्रयास खर्च करना।

इस बारे में मेरे अपने विचार

मुझे लगता है कि इस तरह के समाधान की बड़ी आईटी संरचनाओं में उपयोगी होने की संभावना नहीं है, लेकिन यह छोटे घरेलू उपयोग के लिए आदर्श होना चाहिए।

यह क्लीनअप स्क्रिप्ट को समाप्त करने के लिए अच्छा होगा, ताकि यह पुराने स्नैपशॉट को पुराने से साफ़ कर दे, उदाहरण के लिए, सप्ताह, और सभी उपलब्ध नहीं, मैंने ईमानदारी से कोशिश की, लेकिन यह मेरे लिए कारगर नहीं था। फिर इसे चलाया भी जा सकता है, उदाहरण के लिए, क्रोन में डिफ़ॉल्ट रूप से, दिन में एक बार चलाने के लिए, और फिर btrfs पर आधिकारिक इंस्टॉलेशन स्क्रिप्ट में शामिल, मुझे लगता है कि छोटे संशोधनों के साथ, यह काफी सार्वभौमिक समाधान है, जो btrfs की मानक क्षमताओं पर आधारित है।

हां, मुझे पता है कि मैं lvm हूं, लेकिन मुझे लोहे से अतिक्रमण की एक अतिरिक्त परत की जरूरत नहीं है और एक अलग खंड में चित्र लेना भी il faut नहीं है।

UPD 1:
बग्स को ठीक करने में मदद करने के लिए वारसॉ और क्रैलेकांडर उपयोगकर्ताओं के लिए धन्यवाद।
UPD 2:
उपयोगकर्ता nuit का लाभ, संभावित त्रुटियों से बचने के लिए लिपियों को सही किया।

Source: https://habr.com/ru/post/In160691/


All Articles