წარუმატებელი დისკის ჩანაცვლება mdadm მასივში Ubuntu-ზე
გამოქვეყნებულია: 15 თებერვალი, 2025, 22:07:29 UTC
ბოლო განახლება: 12 იანვარი, 2026, 08:50:19 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 მასივში მწყობრიდან გამოსული დისკის შეცვლა მომიწია, მაგრამ საბედნიეროდ, ეს იმდენად იშვიათია, რომ ჩვეულებრივ, შესაბამისი ბრძანებების მოძიება მიწევს. ამჯერად გადავწყვიტე, მომავალი გამოყენებისთვის ჩემი პატარა სახელმძღვანელო შემექმნა.
ასე რომ, პირველ რიგში, როდესაც mdadm-ისგან საშინელი წარუმატებლობის შესახებ ელფოსტას მიიღებთ, უნდა დაადგინოთ, რომელი დისკი გაფუჭდა. რა თქმა უნდა, ის გეტყვით მოწყობილობის სახელს (ჩემს შემთხვევაში /dev/sdf), მაგრამ ალბათ არ არის ნათელი, თუ რომელი ფიზიკური დისკია სინამდვილეში, რადგან ეს სახელები შეიძლება შეიცვალოს კომპიუტერის ჩატვირთვისას.
თუ არ ხართ დარწმუნებული, თუ რომელი მოწყობილობის სახელია შეცდომაში შეყვანილი, შეგიძლიათ გამოიყენოთ შემდეგი ბრძანება ამის გასარკვევად (ჩაანაცვლეთ /dev/md0 თქვენი RAID მოწყობილობით):
როგორც აღვნიშნე, ჩემს შემთხვევაში ეს იყო /dev/sdf, ასე რომ, მოდით, ამით გავაგრძელოთ.
შემდეგ, შეგიძლიათ სცადოთ გაუმართავი დისკის სერიული ნომრის პოვნა შემდეგი ბრძანების გაშვებით:
(თუ smartctl ვერ მოიძებნა, Ubuntu-ზე უნდა დააინსტალიროთ smartmontools პაკეტი)
სერიული ნომერი შემდეგ შეიძლება შევადაროთ დისკებზე ფიზიკურ ეტიკეტზე მითითებულ სერიულ ნომრებს, რათა გავიგოთ, რომელი მათგანი გაფუჭდა.
ამჯერად, თუმცა, ასე არ გამიმართლა. დისკი სრულიად გაფუჭებული იყო და SMART-ის ან სხვა მონაცემების, მათ შორის სერიული ნომრის მიწოდებაზეც კი უარი თქვა.
რადგან სერვერზე ფიზიკური წვდომა მქონდა (რაც ნამდვილად გჭირდებათ, თუ ფიზიკური დისკის შეცვლას აპირებთ, ვფიქრობ ;-)) და სერვერი რეალურად მუშაობდა დისკის გაფუჭების დროს (და RAID-6 რეზერვის წყალობით შეუფერხებლად განაგრძო მუშაობა), მე ავირჩიე ძალიან პრიმიტიული, მაგრამ სინამდვილეში ძალიან ეფექტური და აშკარა მეთოდი - უბრალოდ დიდი ფაილის სერვერზე კოპირება და იმის ყურება, თუ რომელი HDD ნათურა არ ციმციმებდა. რამდენიმე წამში დამნაშავე ამოვიცანი.
ახლა, ფიზიკური დისკის გამოძალვამდე, კარგი იდეაა, ოფიციალურად აცნობოთ mdadm-ს ამ განზრახვის შესახებ შემდეგი ბრძანების გაცემით (მოწყობილობის სახელები შეცვალეთ თქვენით, საჭიროების შემთხვევაში):
წარმატების შემთხვევაში, mdadm გამოაგზავნის შეტყობინებას, რომ დისკი „წაიშალა“, როგორც ჩანს, იმიტომ, რომ ვირტუალური რეიდის მოწყობილობა რეალურად მუშაობს ამ დროს.
თუ ის ვერ ახერხებს და გამოჩნდება შეცდომის შეტყობინება, როგორიცაა „მოწყობილობა ან რესურსი დაკავებულია“, შესაძლოა, mdadm-მა არ დაარეგისტრირა დისკი, როგორც სრული გაუმართაობა. ამისათვის გაუშვით ეს ბრძანება (ისევ და ისევ, არ დაგავიწყდეთ მოწყობილობის სახელების შეცვლა თქვენით):
ამის შემდეგ, თქვენ უნდა შეძლოთ მოწყობილობის მასივიდან ამოღება წინა ბრძანების გამოყენებით.
ახლა დროა რეალურად შეცვალოთ დისკი. თუ ნამდვილად, ნამდვილად - ანუ, ნამდვილად - დარწმუნებული ხართ, რომ თქვენი მოწყობილობა და კონტროლერი მხარს უჭერს ცხელი ჩანაცვლების ფუნქციას, ამის გაკეთება შეგიძლიათ მოწყობილობის გამორთვის გარეშე. ეს იქნებოდა სწორი გზა კრიტიკული საწარმოო სისტემებისთვის, რომლებიც მუშაობენ რეალურ, სათანადო სერვერულ აპარატურაზე, რომელსაც დანამდვილებით იცით, რომ შეუძლია ამის გაკეთება. თუმცა, ჩემი სახლის ფაილების სერვერი დაფუძნებულია სამომხმარებლო დონის დესკტოპის დედა დაფაზე, რომელსაც აქვს რამდენიმე ნახევრად უსახელო SATA კონტროლერი PCIe სლოტებში, რათა უზრუნველყოს მეტი SATA პორტი.
მიუხედავად იმისა, რომ SATA-ს ზოგადად უნდა ჰქონდეს ცხელი ჩანაცვლების მხარდაჭერა, ამ კონფიგურაციაში რისკზე წასვლას არ ვაპირებდი, ამიტომ დისკის შეცვლისას მოწყობილობის გამორთვა გადავწყვიტე.
ამის გაკეთებამდე კარგი იქნება, თუ /etc/fstab ფაილში კომენტარს გააკეთებთ რეიდ მოწყობილობის შესახებ, რათა Ubuntu-მ შემდეგი ჩატვირთვისას ავტომატურად არ სცადოს მისი დამონტაჟება, რადგან შესაძლოა გაჭედოს და RAID მასივის დაზიანების გამო აღდგენის რეჟიმში გადახვიდეთ. ეს შეიძლება დიდი პრობლემა არ იყოს, თუ ეს დესკტოპ სისტემაა, მაგრამ მე ამ სერვერს headless-ად ვმართავ მონიტორის ან კლავიატურის გარეშე, ამიტომ ეს გარკვეულწილად პრობლემური იქნება.
ახალი, მბზინავი დისკით ჩატვირთვის შემდეგ, გამოიყენეთ lsblk ან სხვა საშუალება მისი იდენტიფიცირებისთვის. თუ არაფერი შეგიცვლიათ, სავარაუდოდ (მაგრამ არა აუცილებლად) მას იგივე სახელი ექნება, რაც შეცვლილ დისკს. ჩემს შემთხვევაში ასე მოხდა, ამიტომ ახალს ასევე /dev/sdf ჰქვია.
რადგან ჩემი მასივი ფიზიკურ მოწყობილობებზე კი არა, დანაყოფებზეა დაფუძნებული, საჭირო იყო დანაყოფების ცხრილის კოპირება მოქმედი დისკიდან ახალ დისკზე, რათა დარწმუნებულიყავი, რომ ისინი ზუსტად იგივეა. თუ მასივს ფიზიკურ მოწყობილობებზე გაუშვებთ, შეგიძლიათ ეს ნაბიჯი გამოტოვოთ.
ამ მიზნით გამოვიყენე sgdisk, დანაყოფის ცხრილი /dev/sdc-დან /dev/sdf-ში დავაკოპირე. დარწმუნდით, რომ მოწყობილობების სახელები შეცვალეთ თქვენი სახელების შესაბამისად.
ყურადღება მიაქციეთ აქ მოცემულ თანმიმდევრობას: ჯერ „to“ დისკს აწერთ! ეს ჩემთვის ცოტა არაინტუიციურად ჟღერს, მაგრამ უბრალოდ დარწმუნდით, რომ სწორად გააკეთეთ, რათა მასივში დისკის კიდევ ერთი გაუმართაობა არ მოხდეს ;-)
შემდეგ, UUID კონფლიქტების თავიდან ასაცილებლად, შექმენით ახალი UUID-ები ახალი დისკისთვის:
და ახლა, საბოლოოდ, დადგა დრო, მასივში ახალი დისკი დავამატოთ და აღდგენის პროცესი დავიწყოთ! (კარგი, ეს სინამდვილეში წვეულება არ არის, სინამდვილეში ეს საკმაოდ ნელი და შემაშფოთებელი პროცესია, რადგან ამ ეტაპზე ნამდვილად არ გსურთ, რომ კიდევ ერთი დისკი გაფუჭდეს. თუმცა, ლუდი შეიძლება დაგეხმაროთ).
ყოველ შემთხვევაში, მასივში ახალი დისკის დასამატებლად, გაუშვით ეს ბრძანება (ისევ და ისევ, დარწმუნდით, რომ მოწყობილობის სახელები შეცვალეთ თქვენით, საჭიროების შემთხვევაში):
თუ ყველაფერი კარგად წავიდა, დისკი მასივს პრობლემების გარეშე დაემატება. ვფიქრობ, ის ნაგულისხმევად „ცხელი სათადარიგო დისკის“ სახით ემატება, მაგრამ რადგან ამ მასივს დისკი აკლია (ის, რომელიც გაფუჭდა), ის მაშინვე გამოიყენება და აღდგენის პროცესი დაიწყება.
შეგიძლიათ თვალყური ადევნოთ მას შემდეგნაირად:
ამას ალბათ გარკვეული დრო დასჭირდება; ჩემს უბრალო სერვერზე (რომელიც ძირითადად მომხმარებლის დონის აპარატურასა და დესკტოპ დისკებზეა დაფუძნებული, გაითვალისწინეთ) 100 მბ/წმ-ზე ოდნავ ნაკლები სიჩქარის მიღწევა იყო შესაძლებელი. გაითვალისწინეთ, რომ ეს არის RAID-6, ამიტომ აღდგენასთან დაკავშირებით პარიტეტის გამოთვლების დიდი რაოდენობაა საჭირო; RAID-10 გაცილებით სწრაფი იქნებოდა. ამ კონკრეტულ მოწყობილობას აქვს AMD A10 9700E ოთხბირთვიანი პროცესორი ("E" ნიშნავს, რომ ეს არის არასაკმარისად დატვირთული ენერგოეფექტური მოდელი, ანუ არა ძალიან სწრაფი), უბრალოდ იმისთვის, რომ წარმოდგენა შეგექმნათ, თუ რას უნდა ელოდოთ. ჩემს სისტემაში არსებული ცხრა 8 ტბ დისკით, სრულ აღდგენას 24 საათზე ოდნავ მეტი დასჭირდა.
აღდგენის დროს, შეგიძლიათ ფაილური სისტემა მასივზე დაამონტაჟოთ და საჭიროების შემთხვევაში ჩვეულებრივად გამოიყენოთ, მაგრამ მე მირჩევნია აღდგენის დასრულებამდე ეს პროცესი მხოლოდ აღდგენის პროცესს მივატოვო. გაითვალისწინეთ, რომ თუ ერთი დისკი გაფუჭდება, მალე შეიძლება მეორეც გაფუჭდეს, ამიტომ აღდგენის პროცესი რაც შეიძლება სწრაფად უნდა დასრულდეს, რადგან ნამდვილად არ გსურთ, რომ ამ დროს სხვა დისკიც გაფუჭდეს. ამიტომ, ნუ გადატვირთავთ მას სხვა IO-თი, რომელიც აბსოლუტურად აუცილებელი არ არის.
დასრულების შემდეგ, დაამატეთ ის თქვენს /etc/fstab ფაილში, გადატვირთეთ კომპიუტერი და ისიამოვნეთ თქვენი ფაილებით :-)
