Ubuntu'da mdadm Dizisindeki Arızalı Bir Sürücüyü Değiştirme
Yayınlandı: 15 Şubat 2025 22:02:36 UTC
Eğer bir mdadm RAID dizisinde sürücü arızası gibi korkunç bir durumla karşı karşıyaysanız, bu makale Ubuntu sisteminde sürücünüzün nasıl doğru şekilde değiştirileceğini açıklıyor.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Bu gönderideki bilgiler Ubuntu 18.04 ve depolarında bulunan mdadm sürümüne dayanmaktadır; yazının yazıldığı tarihte v4.1-rc1. Diğer sürümler için geçerli olabilir veya olmayabilir.
Yakın zamanda, mdadm RAID-6 dizisinde dokuz sürücüden oluşan ev dosya sunucumda ani bir sürücü arızası yaşadım. Bu her zaman korkutucudur, ancak neyse ki ertesi gün teslim edilen bir yedek sürücüyü hızlıca temin edebildim, böylece yeniden yapılandırmayı başlatabildim.
Başlangıçta dosya sunucusunu kurduğumda biraz fazla cimri davrandığımı kabul ediyorum; sürücülerden yalnızca ikisi gerçek NAS sürücüsü (Seagate IronWolf), geri kalanı ise masaüstü sürücüsü (Seagate Barracuda). Şaşırtıcı olmayan bir şekilde, pes eden masaüstü sürücülerden biriydi (ancak neredeyse üç yıllık hizmetten sonra). Tamamen ölmüştü; masaüstü USB muhafazasına taşıdıktan sonra ondan aldığım tek şey sinir bozucu bir tıklama sesiydi ve ne Ubuntu 20.04 ne de Windows 10 onu algılayamadı.
Neyse, yedek parçaya geçelim (ve evet, aldığım yeni sürücü bir IronWolf'tu, ders alındı) - çalışan bir dizide bir sürücüyü kaybetmek ne kadar korkutucu olsa da, onu değiştirmek için doğru prosedürü bilmiyorsanız daha da korkutucu. Bir mdadm dizisinde arızalı bir sürücüyü değiştirmek zorunda kalmam ilk kez olmadı, ancak neyse ki o kadar nadir oluyor ki genellikle doğru komutları aramak zorunda kalıyorum. Bu sefer gelecekte başvurmak için kendi küçük rehberimi hazırlamaya karar verdim.
Yani, her şeyden önce, mdadm'den korkunç başarısızlık olayı e-postasını aldığınızda, hangi sürücünün başarısız olduğunu belirlemeniz gerekir. Elbette, size cihaz adını söyleyecektir (benim durumumda /dev/sdf), ancak makine önyüklendiğinde bu adlar değişebileceğinden, bunun gerçekte hangi fiziksel sürücü olduğu muhtemelen açık değildir.
Hangi aygıt adının başarısız olduğundan bile emin değilseniz, öğrenmek için aşağıdaki komutu kullanabilirsiniz (/dev/md0'ı RAID aygıtınızla değiştirin):
Bahsettiğim gibi, benim durumumda /dev/sdf idi, o yüzden onunla devam edelim.
Daha sonra, şu komutu vererek arızalı sürücünün seri numarasını bulmayı deneyebilirsiniz:
(smartctl bulunamazsa, Ubuntu'ya smartmontools paketini yüklemeniz gerekir)
Daha sonra seri numarası, sürücülerdeki fiziksel etiketteki seri numaralarıyla karşılaştırılarak hangisinin arızalı olduğu anlaşılabilir.
Bu sefer, o kadar şanslı değildim. Sürücü tamamen ölmüştü ve hatta seri numarası dahil SMART veya diğer verileri vermeyi bile reddetti.
Sunucuya fiziksel erişimim olduğundan (ki fiziksel sürücüyü kendiniz değiştirecekseniz buna gerçekten ihtiyacınız var sanırım ;-)) ve disk arızalandığında sunucu gerçekten çalışıyordu (ve RAID-6 yedekliliği sayesinde sorunsuz çalışmaya devam etti), büyük bir dosyayı sunucuya kopyalama ve hangi HDD ışığının titremediğini izleme gibi gerçekten ilkel ama aslında oldukça etkili ve bariz bir yöntemi seçtim. Birkaç saniye içinde suçluyu tespit ettim.
Şimdi, fiziksel sürücüyü çıkarmadan önce, bu niyeti mdadm'e resmi olarak bildirmek iyi bir fikirdir; bunun için şu komutu vermeniz gerekir (uygun olan yerde aygıt adlarını kendi adlarınızla değiştirin):
Başarılı olursa, mdadm sürücüyü "sıcak bir şekilde kaldırdığını" söyleyen bir mesajla yanıt verecektir; görünüşe göre bunun nedeni sanal raid aygıtının o anda çalışıyor olmasıdır.
"Cihaz veya kaynak meşgul"e benzer bir hata mesajıyla başarısız olursa, mdadm'nin aslında sürücüyü tamamen başarısız olacak şekilde kaydetmemiş olması olabilir. Bunu yapmak için, şu komutu verin (tekrar ediyorum, uygun olduğunda cihaz adlarını kendi adlarınızla değiştirmeyi unutmayın):
Bundan sonra, önceki komutla aygıtı diziden kaldırabilmeniz gerekir.
Şimdi sürücüyü gerçekten değiştirme zamanı. Makinenizin ve kontrol cihazınızın sıcak takası desteklediğinden gerçekten, gerçekten - yani, gerçekten - eminseniz, bunu makineyi kapatmadan yapabilirsiniz. Bu, gerçek, düzgün sunucu donanımında çalışan ve bunu gerçekten halledebileceğini bildiğiniz kritik üretim sistemlerinde izlenecek yol olurdu. Ev dosya sunucum, daha fazla SATA portu sağlamak için PCIe yuvalarında birkaç yarı isimsiz SATA kontrol cihazı bulunan tüketici sınıfı bir masaüstü anakartına dayanıyor.
SATA genel olarak sıcak takas özelliğini desteklemesine rağmen, ben bu kurulumda hiçbir şeyi riske atmaya niyetim yoktu, bu yüzden sürücüyü değiştirirken makineyi kapatmayı tercih ettim.
Bunu yapmadan önce, /etc/fstab dosyasındaki raid aygıtını yorum satırına almak iyi bir fikirdir, böylece Ubuntu bir sonraki önyüklemede onu otomatik olarak bağlamaya çalışmaz, çünkü bozulmuş RAID dizisi nedeniyle askıda kalabilir ve sizi kurtarma moduna zorlayabilir. Masaüstü bir sistemse bu büyük bir sorun olmayabilir, ancak bu sunucuyu monitör veya klavye bağlı olmadan başsız çalıştırıyorum, bu yüzden bu biraz zahmetli olurdu.
Makineyi yeni parlak sürücü takılıyken başlattıktan sonra, onu tanımlamak için lsblk veya başka bir araç kullanın. Başka bir şeyi değiştirmediyseniz, muhtemelen (ama mutlaka değil) değiştirdiğiniz sürücüyle aynı adı alacaktır. Benim durumumda öyle oldu, bu yüzden yeni sürücüye /dev/sdf de denir.
Dizim fiziksel aygıtlar yerine bölümlere dayandığından, tam olarak aynı olduklarından emin olmak için bölüm tablosunu çalışan bir sürücüden yeni sürücüye kopyalamam gerekiyordu. Dizinizi bunun yerine fiziksel aygıtlarda çalıştırırsanız, bu adımı atlayabilirsiniz.
Bu amaçla sgdisk'i kullandım, bölüm tablosunu /dev/sdc'den /dev/sdf'ye kopyaladım. Aygıt adlarını uygun şekilde kendi adlarınızla eşleşecek şekilde değiştirdiğinizden emin olun.
Buradaki sıraya dikkat edin : "to" sürücüsünü önce listeliyorsunuz! Bu benim için biraz mantıksız ama dizide başka bir sürücü hatası yaşamamak için doğru yaptığınızdan emin olun ;-)
Daha sonra UUID çakışmalarını önlemek için yeni sürücü için yeni UUID'ler oluşturun:
Ve şimdi nihayet diziye yeni sürücüyü ekleme ve yeniden oluşturma partisini başlatma zamanı geldi! (Tamam, bu gerçekten bir parti değil, aslında oldukça yavaş ve sinir bozucu bir süreç çünkü bu sırada başka bir sürücünün bozulmasını gerçekten, gerçekten istemezsiniz. Yine de bira yardımcı olabilir)
Neyse, diziye yeni bir sürücü eklemek için şu komutu verin (tekrar ediyorum, aygıt adlarını uygun gördüğünüz şekilde kendi adlarınızla değiştirdiğinizden emin olun):
Her şey yolunda giderse, sürücü sorunsuz bir şekilde diziye eklenecektir. Aslında varsayılan olarak "sıcak yedek" olarak eklendiğine inanıyorum, ancak bu dizide bir disk eksik olduğundan (arızalanan), hemen kullanıma alınacak ve yeniden oluşturma süreci başlayacaktır.
Bunu şu şekilde takip edebilirsiniz:
Bu muhtemelen biraz zaman alacaktır; benim düşük seviyeli sunucumda (büyük ölçüde tüketici sınıfı donanım ve masaüstü sürücülere dayalı, aklınızda bulunsun) 100 MB/sn'nin biraz altına ulaşabildi. Bunun RAID-6 olduğunu unutmayın, bu nedenle yeniden yapılandırmada çok sayıda eşlik hesaplaması söz konusudur; bir RAID-10 çok daha hızlı olurdu. Bu özel makinede AMD A10 9700E dört çekirdekli CPU var ("E", düşük hızda çalışan enerji tasarruflu bir model olduğu anlamına gelir, yani süper hızlı değil), sadece ne bekleyeceğinize dair bir fikir vermek için. Kurulumumdaki dokuz adet 8 TB sürücüyle, tam yeniden yapılandırma 24 saatten biraz fazla sürdü.
Yeniden oluşturma sırasında, dosya sistemini diziye bağlayabilir ve isterseniz normal şekilde kullanabilirsiniz, ancak ben yeniden oluşturma tamamlanana kadar bunu ona bırakmayı tercih ediyorum. Bir sürücü arızalanırsa, hemen ardından bir başkasının da gelebileceğini unutmayın, bu nedenle yeniden oluşturmanın mümkün olduğunca hızlı yapılmasını istersiniz çünkü bu sırada başka bir sürücünün arızalanmasını istemezsiniz. Bu nedenle, kesinlikle gerekli olmayan başka bir G/Ç ile yüklemeyin.
Bittiğinde, onu /etc/fstab dosyanıza geri ekleyin, bilgisayarı yeniden başlatın ve dosyalarınızın tadını çıkarın :-)