წარუმატებელი დისკის ჩანაცვლება mdadm მასივში Ubuntu-ზე
გამოქვეყნებულია: 15 თებერვალი, 2025, 22:07:29 UTC
თუ საშინელ სიტუაციაში ხართ mdadm RAID მასივში დისკის გაუმართაობის შემთხვევაში, ეს სტატია განმარტავს, თუ როგორ სწორად შეცვალოთ იგი Ubuntu სისტემაში.
Replacing a Failed Drive in an mdadm Array on Ubuntu
ამ პოსტის ინფორმაცია ეფუძნება Ubuntu 18.04-ს და mdadm-ის ვერსიას, რომელიც შედის მის საცავებში; v4.1-rc1 დაწერის დროს. ეს შეიძლება იყოს ან არ იყოს მოქმედი სხვა ვერსიებისთვის.
ახლახან მქონდა დისკის უეცარი მარცხი ჩემს სახლის ფაილ სერვერზე, რომელიც შედგება ცხრა დისკისგან mdadm RAID-6 მასივში. ეს ყოველთვის საშინელებაა, მაგრამ მე საბედნიეროდ შევძელი სწრაფად გამომეყენებინა შემცვლელი დისკი, რომელიც უკვე მეორე დღეს იყო მიწოდებული, რათა შემეძლო ხელახლა დაწყებულიყო.
მე ნამდვილად ცოტა ძალიან იაფი ვიყავი, როდესაც თავდაპირველად დავაყენე ფაილების სერვერი; დისკებიდან მხოლოდ ორი არის რეალური NAS დრაივი (Seagate IronWolf), ხოლო დანარჩენი არის დესკტოპის დისკები (Seagate Barracuda). გასაკვირი არ არის, რომ ეს იყო ერთ-ერთი დესკტოპის დისკი, რომელმაც უარი თქვა (თუმცა, თითქმის სამი წლის მომსახურების შემდეგ). სრულიად მკვდარი იყო; დესკტოპის USB ბლოკში გადატანის შემდეგ ყველაფერი, რაც მე ამოვიღე, იყო შემაშფოთებელი დაწკაპუნების ხმა და ვერც Ubuntu 20.04-მა და ვერც Windows 10-მა ვერ შეძლეს მისი აღმოჩენა.
ოჰ, გადავიდეთ შემცვლელ ნაწილზე (და დიახ, ახალი დისკი, რომელიც მე ვიყიდე, იყო IronWolf, გაკვეთილი ვისწავლე) - როგორც საშინელი, როგორც დისკის დაკარგვა გაშვებულ მასივში, ეს კიდევ უფრო საშინელია, თუ არ იცით მისი ჩანაცვლების სწორი პროცედურა. ეს არ არის პირველი შემთხვევა, როცა მდადმ მასივში წარუმატებელი დისკის შეცვლა მომიწია, მაგრამ საბედნიეროდ ეს იმდენად იშვიათია, რომ ჩვეულებრივ მიწევს სათანადო ბრძანებების ძებნა. ამჯერად გადავწყვიტე შემექმნა ჩემი პატარა სახელმძღვანელო მომავალი მითითებისთვის.
ასე რომ, უპირველეს ყოვლისა, როდესაც mdadm-ისგან მიიღებთ საშინელ წარუმატებლობის მოვლენის ელ.წერილს, თქვენ უნდა დაადგინოთ, რომელი დრაივი წარუმატებელია. რა თქმა უნდა, ის გეტყვით მოწყობილობის სახელს (ჩემს შემთხვევაში /dev/sdf), მაგრამ ალბათ არ არის აშკარა, თუ რომელი ფიზიკური დისკი არის სინამდვილეში, რადგან ამ სახელების შეცვლა შესაძლებელია აპარატის ჩატვირთვისას.
თუ თქვენ არც კი ხართ დარწმუნებული, რომელი მოწყობილობის სახელი ვერ მოხერხდა, შეგიძლიათ გამოიყენოთ შემდეგი ბრძანება გასარკვევად (შეცვალეთ /dev/md0 თქვენი RAID მოწყობილობით):
როგორც აღვნიშნეთ, ჩემს შემთხვევაში ეს იყო /dev/sdf, ასე რომ გავაგრძელოთ.
შემდეგ, შეგიძლიათ სცადოთ იპოვოთ წარუმატებელი დისკის სერიული ნომერი ამ ბრძანების გაცემით:
(თუ smartctl ვერ მოიძებნა, თქვენ უნდა დააინსტალიროთ smartmontools პაკეტი Ubuntu-ზე)
შემდეგ სერიული ნომერი შეიძლება შევადაროთ დისკებზე ფიზიკურ ეტიკეტზე სერიულ ნომრებს, რათა გაირკვეს, რომელი ვერ მოხერხდა.
თუმცა ამჯერად არც ისე გამიმართლა. დისკი სრულიად მკვდარი იყო და უარი თქვა SMART-ის ან სხვა მონაცემების, სერიული ნომრის ჩათვლით.
მას შემდეგ, რაც მე მქონდა ფიზიკური წვდომა სერვერზე (რომელიც ნამდვილად გჭირდებათ, თუ თქვენ თვითონ აპირებთ ფიზიკური დისკის გამოცვლას, ვფიქრობ ;-)) და სერვერი ფაქტობრივად მუშაობდა, როდესაც დისკი ჩავარდა (და განაგრძობდა კარგად მუშაობას RAID-6 სიჭარბის წყალობით), მე მივიღე მართლაც პრიმიტიული, მაგრამ რეალურად ძალიან ეფექტური და აშკარა მეთოდი, რომელიც უბრალოდ დააკოპირე დიდი ფაილი სერვერზე, რომელიც HDD-ს შუქს უყურებდა. რამდენიმე წამში აღმოვაჩინე დამნაშავე.
ახლა, სანამ ფიზიკურ დისკს გამორთავთ, კარგი იდეაა, რომ ოფიციალურად აცნობოთ mdadm-ს ამ განზრახვის შესახებ, ამ ბრძანების გაცემით (შესაბამისად, შეცვალეთ მოწყობილობის სახელები თქვენით):
წარმატების შემთხვევაში, mdadm უპასუხებს შეტყობინებით, რომელშიც ნათქვამია, რომ მან "ცხელად ამოიღო" დისკი, როგორც ჩანს, იმიტომ, რომ ვირტუალური რეიდის მოწყობილობა რეალურად მუშაობს იმ დროს.
თუ ის ვერ გამოდის შეცდომის მსგავსი შეტყობინებით "მოწყობილობა ან რესურსი დაკავებულია", შესაძლოა, mdadm-ს ფაქტობრივად არ დაარეგისტრირა დისკი, რომ მთლიანად ჩავარდა. ამის გასაკეთებლად, გაუშვით ეს ბრძანება (კიდევ ერთხელ, დაიმახსოვრეთ, რომ შეცვალოთ მოწყობილობის სახელები თქვენით):
ამის შემდეგ, თქვენ უნდა შეძლოთ მოწყობილობის ამოღება მასივიდან წინა ბრძანებით.
ახლა დროა რეალურად შეცვალოთ დისკი. თუ ნამდვილად, ნამდვილად - როგორც, ნამდვილად - დარწმუნებული ხართ, რომ თქვენი მანქანა და კონტროლერი მხარს უჭერს ცხელ ცვლას, ამის გაკეთება შეგიძლიათ აპარატის გამორთვის გარეშე. ეს იქნება გზა კრიტიკულ საწარმოო სისტემებზე, რომლებიც მუშაობენ რეალურ, სათანადო სერვერის აპარატურაზე, რომელსაც თქვენ ნამდვილად იცით, რომ შეუძლია მას გაუმკლავდეს. ჩემი სახლის ფაილების სერვერი დაფუძნებულია სამომხმარებლო კლასის დესკტოპის დედაპლატზე, რომელსაც აქვს რამდენიმე ნახევრადსახელო SATA კონტროლერი PCIe სლოტებში, რათა უზრუნველყოს მეტი SATA პორტი.
მიუხედავად იმისა, რომ SATA ზოგადად უნდა უჭერდეს მხარს ცხელ ცვლას, მე არ ვაპირებდი რაიმეს რისკის ქვეშ ამ კონფიგურაციაში, ამიტომ ავირჩიე აპარატის გამორთვა დისკის გამოცვლისას.
სანამ ამას გააკეთებთ, კარგი იდეაა, კომენტარი გააკეთოთ რეიდის მოწყობილობაზე /etc/fstab ფაილში, რათა Ubuntu არ შეეცადოს მის ავტომატურად დამონტაჟებას მომდევნო ჩატვირთვისას, რადგან ის შეიძლება გაჩერდეს და აიძულოთ თქვენ გადახვიდეთ აღდგენის რეჟიმში დეგრადირებული RAID მასივის გამო. ეს შეიძლება არ იყოს დიდი პრობლემა, თუ ეს დესკტოპის სისტემაა, მაგრამ მე ვმართავ ამ სერვერს უთავო, მონიტორის ან კლავიატურის მიმაგრების გარეშე, ასე რომ ეს ცოტა პრობლემა იქნება.
დაინსტალირებული მბზინავი ახალი დისკით აპარატის ჩატვირთვის შემდეგ გამოიყენეთ lsblk ან სხვა საშუალებები მის იდენტიფიცირებისთვის. თუ სხვა არაფერი შეგიცვლიათ, ის სავარაუდოდ (მაგრამ არა აუცილებლად ) მიიღებს იგივე სახელს, რაც თქვენ შეცვალეთ დისკზე. ჩემს შემთხვევაში ასე მოხდა, ამიტომ ახალს ასევე უწოდებენ /dev/sdf.
იმის გამო, რომ ჩემი მასივი დაფუძნებულია ტიხრებზე და არა ფიზიკურ მოწყობილობებზე, დამჭირდა დანაყოფის ცხრილის კოპირება სამუშაო დისკიდან ახალ დისკზე, რათა დავრწმუნდე, რომ ისინი ზუსტად იგივეა. თუ თქვენ აწარმოებთ თქვენს მასივს ფიზიკურ მოწყობილობებზე, შეგიძლიათ გამოტოვოთ ეს ნაბიჯი.
ამ მიზნით გამოვიყენე sgdisk, დანაყოფის ცხრილის კოპირება /dev/sdc-დან /dev/sdf-ზე. დარწმუნდით, რომ შეცვალეთ მოწყობილობების სახელები, რათა შეესაბამებოდეს თქვენს სახელს.
ყურადღება მიაქციეთ წესრიგს აქ: თქვენ ჩამოთვალეთ "to" წამყვანი ! ეს ცოტა საწინააღმდეგო ინტუიციურია ჩემთვის, მაგრამ უბრალოდ დარწმუნდით, რომ სწორად გაიგეთ, რათა არ მიიღოთ სხვა დისკის უკმარისობა მასივში ;-)
შემდეგ, UUID კონფლიქტების თავიდან ასაცილებლად, შექმენით ახალი UUID-ები ახალი დისკისთვის:
და ახლა საბოლოოდ დადგა დრო, რომ დაამატოთ ახალი დისკი მასივში და დაიწყოთ აღდგენის წვეულება! (კარგი, ეს ნამდვილად არ არის წვეულება, ეს რეალურად საკმაოდ ნელი და შემაშფოთებელი პროცესია, რადგან თქვენ ნამდვილად, ნამდვილად არ გინდათ, რომ ამ დროს სხვა დრაივი ჩავარდეს. თუმცა, ლუდი შეიძლება დაგეხმაროთ)
ყოველ შემთხვევაში, ახალი დისკის მასივში დასამატებლად, გაუშვით ეს ბრძანება (კიდევ ერთხელ, დარწმუნდით, რომ შეცვალეთ მოწყობილობის სახელები თქვენით):
თუ ყველაფერი კარგად წავიდა, დისკი დაემატება მასივს შეფერხების გარეშე. მე მჯერა, რომ ის რეალურად არის დამატებული, როგორც "ცხელი სათადარიგო" ნაგულისხმევად, მაგრამ რადგან ამ მასივს აკლია დისკი (ის, რომელიც ვერ მოხერხდა), ის დაუყოვნებლივ გამოიყენება და დაიწყება აღდგენის პროცესი.
შეგიძლიათ თვალი ადევნოთ ასე:
ამას ალბათ გარკვეული დრო დასჭირდება; ჩემს დაბალ სერვერზე (ძირითადად სამომხმარებლო კლასის აპარატურასა და დესკტოპის დისკებზე დაფუძნებული, გაითვალისწინეთ) მან შეძლო მიაღწიოს სულ რაღაც 100 მბ/წმ-ს. გაითვალისწინეთ, რომ ეს არის RAID-6, ასე რომ, ბევრი პარიტეტის გამოთვლაა ჩართული ხელახლა აშენებასთან; RAID-10 ბევრად უფრო სწრაფი იქნებოდა. ამ კონკრეტულ მანქანას აქვს AMD A10 9700E ოთხბირთვიანი CPU ("E" ნიშნავს, რომ ეს არის დაბალი საათის ენერგოეფექტური მოდელი, ანუ არ არის სუპერ სწრაფი), უბრალოდ იმის გასაგებად, თუ რას უნდა ელოდოთ. ცხრა 8 ტბაიტიანი დისკით ჩემს დაყენებაში, სრულ აღდგენას 24 საათზე მეტი დასჭირდა.
აღდგენის დროს შეგიძლიათ დააინსტალიროთ ფაილური სისტემა მასივზე და გამოიყენოთ იგი ჩვეულებრივად, თუ გსურთ, მაგრამ მე მირჩევნია, ის გადავაშენო, სანამ არ დასრულდება. დაიმახსოვრეთ, რომ თუ ერთი დისკი მარცხდება, შეიძლება მალე მოჰყვეს მეორე, ასე რომ თქვენ გსურთ, რომ რეკონსტრუქცია შესრულდეს რაც შეიძლება სწრაფად, რადგან ნამდვილად არ გსურთ, რომ სხვა დისკი ჩავარდეს ამ დროს. ამიტომ, ნუ დატვირთავთ მას სხვა IO-ით, რომელიც მკაცრად არ არის საჭირო.
დასრულების შემდეგ, დაამატეთ იგი თქვენს /etc/fstab ფაილში, გადატვირთეთ და ისიამოვნეთ თქვენი ფაილებით :-)