USB 關閉寫入保護

USB 關閉寫入保護

我有一個受寫保護的 USB:

dmesg | tail

[10098.126089] sd 7:0:0:0: [sdb] Write Protect is on
[10098.126098] sd 7:0:0:0: [sdb] Mode Sense: 23 00 80 00
[10098.126779] sd 7:0:0:0: [sdb] No Caching mode page present
[10098.126788] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[10098.131418] sd 7:0:0:0: [sdb] No Caching mode page present
[10098.131425] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[10098.133335]  sdb: sdb1
[10098.135509] sd 7:0:0:0: [sdb] No Caching mode page present
[10098.135515] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[10098.135521] sd 7:0:0:0: [sdb] Attached SCSI removable disk

如何關閉寫保護?

我嘗試過的

  1. 檢查它是否有硬體開關 - 沒有
  2. 嘗試在 Windows 和 Linux 上格式化它(也透過終端)
  3. 嘗試過fdisk|chmod
  4. 嘗試使用 Ubuntu 軟體中心的幾個工具來修復此問題
  5. 使用 Google 並看到大約 10,000 個關於此問題的討論,但從未解決

附加資訊

fsck -n /dev/sdb1

fsck from util-linux 2.19.1
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
There are differences between boot sector and its backup.
Differences: (offset:original/backup)
  65:01/00
  Not automatically fixing this.
Free cluster summary wrong (968250 vs. really 911911)
  Auto-correcting.
Leaving file system unchanged.
/dev/sdb1: 50 files, 93653/1005564 clusters

fdisk -l

   Device  boot.   Start        End      Blocks   Id  System
/dev/sdb1            32     8060927     4030448    b  W95 FAT32

umount /dev/sdb1

mkfs -t vfat /dev/sdb1

mkfs.vfat 3.0.9 (31 Jan 2010)
mkfs.vfat: unable to open /dev/sdb1

答案1

要關閉磁碟設備的寫入保護,我們使用低階系統實用程式 hdparm,如下所示:

sudo apt-get install hdparm    
sudo hdparm -r0 /dev/sdb

我們假設這/dev/sdb是我們正在處理的實體磁碟設備。如果裝置的分割區安裝為唯讀,則應將其重新安裝為讀寫,以便向其中寫入資料。

希望有幫助。

答案2

研究完你的問題後,發現這對於某些品牌的 USB 隨身碟(一些較舊的三星、金士頓型號)來說是一個不太罕見的問題,基本上會無緣無故地「崩潰」。人們曾嘗試打開它們並跳過兩條引線(也許來自片狀開關?),但無濟於事。如果您仍然擁有該驅動器並且仍在保固期內,我會將其退回並更換。

我不想向你透露這個壞消息=\但看來你在這種情況下運氣不好,因為我讀到的所有內容都指向硬體故障。

編輯 05/27/2016:我個人最近遇到了閃存驅動器脫落的問題。就我而言,這是一台 Corsair Flash Voyager 128GB,速度開始大幅減慢。雖然它沒有表現出此處提到的症狀,但它有時無法安裝並顯示為“矽電源”設備。這是由於驅動器累積了大量壞扇區並進入診斷/編程模式的結果。由於這是我更受歡迎的答案之一,並且也屬於“失敗的閃存驅動器”類別,因此我想我會將其放在這裡​​以供參考。

更新 2:關於 Corsair Flash Voyager,我將我的送回 RMA,結果我的第二個也以同樣的方式失敗了。問題其實是機械問題。滑動機構似乎對 PCB 施加了少量壓力。通常,這不會對設備的正常使用壽命造成問題。但對於這個特殊的模型來說,它的焊點似乎很薄弱,滑動動作產生的壓力加劇了——導致裂紋焊點氧化並最終失效。我沒有再做一次 RMA,而是將事情掌握在自己手中。我打開外殼,削掉一些塑膠外殼,給 PCB 一些擺動空間,然後對 NAND 晶片進行回流焊接以修復破損的焊點。至今效果很好!

答案3

到目前為止提供的這些答案都不正確。

要真正使其工作,您可以使用 USB 怪異設定來覆蓋對宣布其​​唯讀的 USB 磁碟的檢測。這是它的工作原理。

  1. 插入 USB 裝置並執行以下lsusb操作:

    $ lsusb
    Bus 002 Device 012: ID 0781:5583 SanDisk Corp. 
    
  2. 記下ID冒號之後和之間的兩個代碼(它們稱為 和idVendoridProduct。拔下 USB 裝置。

  3. 刪除usb_storage內核模組(假設它被編譯為模組)

    $ sudo modprobe -r $(lsmod | sed -n 's:,: :g ; s,^usb_storage[ 0-9]*,,p') usb_storage
    
  4. 現在,我們將使用怪異模式設定將模組放回原處,以覆蓋對裝置只寫標誌的偵測。

    來源/驅動程式/USB/儲存/usb.c#L572取自 v4.19,您可以看到我們正在尋找的怪異模式設定是w。以下是我們重新載入核心模組的方法:

    $ sudo modprobe usb_storage quirks=0781:5583:w
    

    將冒號之間的數字替換為您在上面步驟 (1) 中看到的數字。

  5. 重新插入 USB 儲存裝置dmesg

    前: 只寫損壞

    之後: 工作讀/寫

    此外,在發出 mount 命令後,您將看到:

    /dev/sdb1 on /usb type ext4 (rw,relatime)
    

現在立即從該磁碟上取出你的東西,它失敗了。

答案4

Angel的回答很好,但實際的命令對我來說並不那麼容易。這是有效的:插入卡(我的是一張SD卡,上面有一個手動寫入保護開關,但開關是關閉的,它在Windows機器上是可寫入的)。 Ubuntu 會自動將其安裝在 /media/andrew/6AB0-1FD91 上,dmesg 顯示分割區為 /dev/sdb1。

卸載它,並使其可寫

sudo umount /dev/sdb1
sudo hdparm -r0 /dev/sdb

建立一個新的掛載點並將其掛載到那裡(我的 /etc/passwd 中的 userID 是 1000)

sudo mkdir /media/andrew/temp
sudo mount -o uid=1000 /dev/sdb1 /media/andrew/temp

它仍然會抱怨它是唯讀的。我不知道為什麼我必須在安裝之前和之後更改此標誌,但這是它對我有用的唯一方法。再次將其設為可寫,然後在同一位置重新掛載

sudo hdparm -r0 /dev/sdb1
sudo mount -o remount,rw /dev/sdb1

現在我可以以普通用戶身分寫入磁碟。我對此非常小心,以防它實際上失敗,但這些命令允許我完成我正在做的事情。

相關內容