SATA diskini çalışan bir sistemden nasıl güvenle kaldırabilirim?


64

Bazen bir diski bir disk yuvasına takmam gerekir. Diğer zamanlarda, bir masaüstünden güç çekerken dizüstü bilgisayarımdaki SATA-eSATA kablosunu kullanarak bir SSD'yi bağlamanın çok garip ayarlarına sahibim.

SATA diskini sistemden nasıl güvenle çıkarabilirim? Bu Phoronix forum başlığının bazı önerileri var:

justsumdood şunu yazdı:

Bir (noymous) droid yazdı: Çıkarmadan
önce yazılım tarafında ne yaparsınız? Basit bir "umount / dev / sd" [sürücü harfi] mi? cihazın bağlantısını kestikten sonra, birimi "kapatmak" (veya kapatmak):

hdparm -Y /dev/sdX

(X, kapatmak istediğiniz cihazı temsil ediyor. örneğin: / dev / sdb)

bu, sürücüyü çalıştıracak ve voltaj dalgalanma riski olmadan sökülmesini sağlayacaktır.

Bu, disk önbelleklerinin uygun şekilde temizlendiği ve daha sonra kapatıldığı anlamına mı geliyor?

Aynı konuya ilişkin başka bir öneri:

chithanh şunu yazdı:
Tüm SATA ve eSATA donanımı fiziksel olarak kapatılabilir (yani fişi taktığınızda / çekerseniz zarar görmez).

Yongaseti ve sürücünün bunu nasıl idare ettiği başka bir soru. Bazı sürücü / yonga kümesi kombinasyonları hotplugging'i düzgün bir şekilde işlemez ve aşağıdaki gibi bir warmplug komutuna ihtiyaç duyar:

echo 0 - 0 > /sys/class/scsi_host/hostX/scan

SATA / eSATA bağlantı noktanız için uygun sayıyı X ile değiştirin.

Bunun doğru yolun olup olmadığından şüpheliyim, ancak buna karşı da bir kanıt bulamıyorum.

Peki, bağlı bir diski sistemden çıkarmanın doğru yolu nedir? Diyelim ki, diskteki her bölümün bağlantısını kesmişim ve koştum sync. Lütfen mümkünse bazı resmi belgelere dikkat edin, Linux belge ağacında veya Linux ATA wiki'de hiçbir şey bulamadım .

Yanıtlar:


82
  1. Diskteki tüm dosya sistemlerini çıkarın. ( umount ...)
  2. LVM gruplarını devre dışı bırakın. ( vgchange -an)
  3. Hiçbir şeyin diski bir şey için kullanmadığından emin olun.
  4. Bunu yaptıktan sonra, fişini çekmek güvenli olmalı.

Ekstra dikkatli olmak istiyorsanız, echo 1 > /sys/block/(whatever)/device/deleteönce yapın. Bu, cihazı çekirdekten siler, böylece fişini çekerken hiçbir şey kullanmadığını bilirsiniz . Bunu bir eSATA muhafazasındaki bir sürücü ile yaptığımda, sürücünün kafalarının kendilerinin park ettiğini duyabiliyorum, böylece çekirdek görünüşte sürücüye kapatmaya hazırlanmalarını söylemektedir.

Bir AHCI kontrol cihazı kullanıyorsanız, fişi çekili olan cihazlarla baş etmelidir. Başka tür SATA denetleyicileri kullanıyorsanız, sürücü hotplugging ile karıştırılabilir.

Tecrübelerime göre SATA hotplugging (AHCI ile) Linux'ta oldukça iyi çalışıyor. Bir optik sürücüyü çıkardım, bir sabit sürücüye taktım, hataları taradım, bir dosya sistemi yaptım ve verileri kopyaladım, takılmamış ve çıkarıldım, farklı bir DVD sürücüye taktım ve bir diski yaktım. ve koşuyor.


Tamamen silmek istediğim bir HDD'nin fişini çekmeye ihtiyacım vardı. Diski yuvasından çıkardıktan sonra / dev / sdXY yine de ortaya çıktı. Bunu ortadan 1kaldırmak için yazmak deleteve diskin döndüğünü duyabiliyordum. Sadece hdparm -Yyeterli değildi, çünkü /dev/girişler hala var olacaktı. Teşekkürler!
Lekensteyn

16
Her zamanecho 1 > /sys/block/(whatever)/device/delete komutu vermenizi şiddetle tavsiye ediyorum , çünkü sürücü kafaları park edecek, diski tamamen durduracak ve veri yolu üzerindeki gücü devre dışı bırakacaktır. Park edilmemiş bir kafa bir döner plakaya temas ederse, tahrik kalıcı olarak tahrip olabilir.
davul

2
Ayrıca - smartd çalışıyorsa, SIGHUP'ı işleme vermek için sürücü bilgisini yeniden yükleyebilmek için iyi bir fikirdir. Özellikle de sürücüleri değiştiriyorsanız önemlidir, çünkü smartd bu sürücü ve diğerleri için bilgileri yeniden yükler.
davul

1
Bahsetmeye değer sadece bir not, echo 1 > /sys/block/(whatever)/device/deletealtında çalışmayacak sudo, "İzin Verilmedi" hatası atılacak. Gerçek bir kök olmanız gerekecek, subunun yerine düz eski kullanın.
TranslucentCloud

11
@TranslucentCloud sudo teeBir yönlendirmeyi root olarak taklit etmek için boru döşeyebilirsiniz :echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli

5

Bu iki bölüm farklı şeyler içindir.

İlki çıkarmak için . İkincisi, takmak içindir .

Çıkarma için işletim sistemi, unmount işlemi sırasında verileri senkronize eder. Böylece, eğer disk sökülmemişse (aslında tam donanım desteğine sahip olduğunuzu varsayarsak) diski kapatabilir ve veri kaybı veya bozulma riski olmadan fişi çıkarabilirsiniz.

Takmak için cihazın otomatik olarak tanınması gerekir. Değilse, bir veri yolu taramasını tetiklemek için bu komutu çalıştırabilirsiniz. Cihaz tanındıktan sonra monte edebilirsiniz.

Ve bunu sadece USB sürücülerde böyle bir şey yaptığımı söyleyerek söylememe izin verin.


Cevabınız için teşekkürler, ama hala doğru eylemin ne olacağına ikna olmadım. SSD'lerin "Güvensiz Kapatma Sayısı" SMART alanı var, sadece hiçbir şey yapmadan çıkarması bana güvenli gelmiyor.
Lekensteyn

3
İşe yararsa, ilk önce sökülmemiş olduğundan emin olmaksızın işimin bir parçası olarak SATA sabit disklerini düzenli olarak çalışırken takıp çıkarırım ve hiçbir zaman sorun yaşamadım. Bu bir fıkra, bu yüzden incil olarak kabul etme, ama en azından muhtemelen güvenli olduğuna dair bir kanıt. Her durumda, işletim sistemi verinin tam olarak kullanılmadığı bir işlemin sonunda, özellikle hotplug dünyasında yazıldığından emin olmamasını sağlarsa, bir çekirdek hatası olarak düşünürdüm.
Jander,

1
@Lekensteyn, bununla hdparm -Yilgilenecek. Temel olarak, sistemi her askıya aldığınızda veya kapattığınızda yaptığınız şey budur.
psusi

5

Ne hakkında eject /dev/sdX? Ayarlarımda bu komut sürücüyü tutar, senkronize eder ve kapatır.


4
Bunu eSATA üzerinden bağlı bir diskle denedim, ancak komut "hotpluggable değil" ya da başka bir şeyle başarısız oldu.
Lekensteyn

1
Afaik çıkar, takılabilir diski takarak aygıtı değil. Blok cihaz sürücüsünün ioctl(), ejectalet tarafından kullanılan işlemi desteklediğine bağlıdır . Esata sabit disk sürücüleri desteklemiyor, ancak optik cihazlar, disketler ve muhtemelen flash sürücüler, evet.
user259412

2

Wyzard'ın cevabına dayanan bir çift senaryom var . İlki, scsi-droptek bir diski güvenle ayırmaktır:

#!/bin/sh

if test -h "$1"
then
    disk=$(chase "$1")
else
    disk="$1"
fi

if test -b "$disk"
then
    echo 1 >/sys/block/$(basename "$disk")/device/delete
else
    echo "$0: not a block device: $1" >&2
    exit 1
fi

Başlıca yararı, içinde bulunduğu gibi bir sembolik bağlantıyı iletmeniz /dev/disk/by-id/ve bunu gerçek cihaza çözmesidir. Yüklenmesi chasegerekiyor; kullanarak aynı sonucu elde edebilirsiniz readlink -e.

İkinci komut dosyası, scsi-rescanyeni bir cihazı çalıştırdıktan sonra kullanılır:

#!/bin/bash

exec tee /sys/class/scsi_host/host*/scan <<<'- - -' >/dev/null

Bu, tüm adaptörlerin cihazları yeniden taramasını sağlar. Okumak için yeni kapasite ve bölümleme tablosunu elde etmenin tek yolu buydu.


0

Aslında, SATA sürücüler güç kaybolduğunda kafaları otomatik olarak park eder. Hala dönerken sürücüyü çekmek sorunlara neden olmamalıdır. Bununla birlikte, eğirme diskleri, çarpılırsa tortulara eğilimlidir. Bunu, lapa lapa güçünüz veya güneş fişekleriniz olduğunda duyabilirsiniz.

Çoğu hasara genellikle, temizlenmemiş önbellek ve arabelleklerde yazılmamış yazma vb. Neden olur ... Bu nedenle, çıkarmadan önce bir sürücünün bağlantısını kesmeniz GEREKİRDİR. SCSI komutu sadece iyi bir ölçüdür ve aynı amaç için çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.