ปิดการป้องกันการเขียน USB


92

ฉันมี 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. พยายามแก้ไขด้วยเครื่องมือต่าง ๆ จากศูนย์ซอฟต์แวร์อูบุนตู
  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

7
ฉันไม่สามารถฟอร์แมตได้เนื่องจากการป้องกันการเขียน
noob

2
@micha - เป็นอุปกรณ์ USB ชนิดใด - เห็นได้ชัดว่าคุณตรวจสอบว่ามีสวิตช์ฮาร์ดแวร์หรือไม่ ข้อผิดพลาดใด ๆ ถ้าคุณพยายามที่จะติดมัน? sudo mount /dev/sdb1 -v?
fossfreedom

1
ไมกายุติธรรมพอ คุณได้ลองใช้efsckหรือใช้Disk Utilityของ Ubuntu เพื่อตรวจสอบสถานะสุขภาพของแฟลชดิสก์หรือไม่? หากทำงานได้ดี & หยุดทำงานทันทีทันใดอาจมีความผิดปกติของฮาร์ดแวร์
kingmilo

1
@kingmilo e2fsck:Bad magic number in super-block while trying to open /dev/sdb1 SuperBlock is not readable.
noob

1
@ ไมชา - ดีมากยังไม่ได้หมายความว่ามันไม่ใช่ความผิดพลาด แต่น่าเสียดาย เป็นเรื่องปกติที่อุปกรณ์จัดเก็บข้อมูลจะทำงานได้ตามปกติเมื่อในความเป็นจริงอุปกรณ์เหล่านั้นผิดปกติ ฉันคิดว่ากับกิจกรรมทั้งหมดในคำถามนี้คุณควรขอเงินบริจาคเล็กน้อยเพื่อทดแทนไดรฟ์มันจะง่ายขึ้น😜
kingmilo

คำตอบ:


81

ในการปิดการป้องกันการเขียนของอุปกรณ์ดิสก์เราใช้ hdparm ยูทิลิตี้ระบบระดับต่ำเช่นนี้:

sudo hdparm -r0 /dev/sdb

โดยที่เราสันนิษฐานว่า/dev/sdbเป็นอุปกรณ์ดิสก์แบบฟิสิคัลที่เรากำลังทำงาน หากอุปกรณ์มีพาร์ติชันที่เมาท์เป็นแบบอ่านอย่างเดียวคุณควรเมานต์ใหม่เป็นแบบอ่าน - เขียนเพื่อเขียนข้อมูลลงไป

หวังว่าจะช่วย


คุณคือฮีโร่ของฉัน ฉันจะเรียนรู้สิ่งที่เกิดขึ้นหลังจากการใช้เวทมนตร์คาถานี้?
Marcos Modenesi

3
คุณสามารถหาคำอธิบายได้โดยการพิมพ์คำสั่งที่นี่> explainshell.com
bagustris

75
มันแสดงให้เห็นreadonly = 0 (off)แต่ก็ยังฉันไม่สามารถเขียนหรือจัดรูปแบบได้
shyammakwana.me

1
@OP ฉันมีเช่นเดียวกับคุณซึ่งก็คือ: การ์ด sdxc ติดตั้งแบบอ่านอย่างเดียวสิ่งที่คอมพิวเตอร์; hdparm -rแสดง "1 - เปิด" จากนั้นหลังจากปลดล็อคด้วยr0: "0 - ปิด" แต่เมานต์อ่านอย่างเดียวแล้ว แต่การติดตั้งการ์ด SanDisk sd ของฉันในอะแดปเตอร์อื่นและฉันติดตั้งมัน rw ปรากฎว่าอะแดปเตอร์ microSD-to-SD สองตัวของฉันมีพินหักระหว่างตัวเชื่อมต่อสองตัว และทั้งสองนี้จะเมานต์อ่านอย่างเดียวสิ่งที่ฉันทำ Kuddos ถึง @Angel_Genchev คำตอบของเขามีคำสั่งมากที่สุด
tuk0z

2
@lliseil เป็นไปได้มากกว่าที่สวิตช์ป้องกันการเขียนของผู้อ่านจะถูกกดโดยการ์ดที่ใส่เข้าไปโดยปกติโดยแท็บบนการ์ด แต่สวิตช์ (ไม่ใช่แท็บ) สามารถโค้งงอและติดอยู่ คุณสามารถแก้ไขตัวอ่าน sdcard ได้โดยการตัดพินสวิตช์ป้องกันการเขียนตัวที่สัมผัสทางกายภาพกับแถบล็อคบนการ์ด เมื่อสวิตช์ในเครื่องอ่านเปิดอยู่การป้องกันการเขียนจะดับเมื่อปิด (โดยกดที่แท็บบนการ์ด) ป้องกันการเขียน การถอดแขนโลหะสวิตช์หนึ่งหรือทั้งสองออกจะเป็นการปิดการป้องกันการเขียนบนเครื่องอ่านอย่างถาวร
Hydranix

31

หลังจากทำการค้นคว้าคำถามของคุณพบว่าปัญหานี้เป็นปัญหาที่ไม่ธรรมดาที่เกิดขึ้นกับแฟลชไดรฟ์ USB บางยี่ห้อ (ซัมซุงรุ่นเก่าของ KINGSTON บางรุ่น) ซึ่งจะเป็นเพียง "กำจัด" โดยไม่ทราบสาเหตุ ผู้คนลองเปิดพวกมันและกระโดดไปมาทั้งสองฝ่าย หากคุณยังมีไดรฟ์นี้อยู่และยังอยู่ในการรับประกันฉันจะส่งคืนและเปลี่ยนใหม่

ฉันเกลียดที่จะแยกข่าวร้ายกับคุณ = \ แต่ดูเหมือนว่าคุณจะโชคไม่ดีในสถานการณ์นี้เพราะทุกอย่างที่ฉันอ่านได้ชี้ไปที่ฮาร์ดแวร์ล้มเหลว

แก้ไข 05/27/2016: ฉันประสบปัญหาเป็นการส่วนตัวด้วยแฟลชไดรฟ์ที่พุ่งพรวดเข้ามาหาฉันเมื่อเร็ว ๆ นี้ ในกรณีของฉันนี่คือ Corsair Flash Voyager 128GB ที่เริ่มช้าลงอย่างเห็นได้ชัดสำหรับฉัน แม้ว่าจะไม่แสดงอาการที่ระบุไว้ที่นี่ แต่บางครั้งก็ไม่ติดและแสดงเป็นอุปกรณ์ "ซิลิคอนพาวเวอร์" นี่เป็นผลมาจากไดรฟ์ที่มีเซกเตอร์เสียจำนวนมากเกิดขึ้นและเข้าสู่โหมดการวินิจฉัย / การเขียนโปรแกรม เนื่องจากนี่เป็นหนึ่งในคำตอบที่ได้รับความนิยมมากกว่าของฉันและนี่ยังอยู่ในหมวดของ "แฟลชไดรฟ์ที่ล้มเหลว" ฉันคิดว่าฉันจะใส่ไว้ที่นี่เพื่อใช้อ้างอิง


5
@admins: I Wanna ทราบว่าประเภทของคำตอบนี้จะได้รับอนุญาตหรือไม่ :)
tachyons

7
@BobobackerMk หากเป็นคำตอบก็เป็นคำตอบ :)
jrg

4
@Tachyons "อนุญาตคำตอบประเภทนี้หรือไม่" ผู้คนใน stackexchange พยายามทำอะไรเพื่อทำให้เสื่อมเสียชื่อเสียงของคำถามหรือคำตอบของผู้อื่นอย่างสม่ำเสมอ เห็นได้ชัดว่าคำตอบนี้เป็นคำตอบที่ถูกต้อง; สำหรับเหตุผลที่ jrg กล่าว
GoProCameraByGoPro

@GoProCameraByGoPro ที่เป็นความคิดเห็นอายุ 3 ปีความกังวลของฉันไม่ได้เกี่ยวกับคุณภาพของคำตอบ และ jrg ได้ตอบคำถามของฉันแล้ว :-)
Tachyons

@Tachyons ฉันทำส่วนของฉันเพื่อเรียกข้ออ้างที่นี่ใน stackexchange เป็นคำถาม ถ้าฉันมีข้อมูลฉันจะดูแนวโน้มของกลุ่มประชากรของคนที่ทำอย่างนั้นและฉันอาจจะเพิกเฉยได้ แต่ตอนนี้ฉันจะต้องถามคำถามพวกเขาเมื่อฉันเห็นพวกเขา
GoProCameraByGoPro

21

ใช้fdisk -lค้นหาไดรฟ์เช่น: / dev / sdc1

ตอนนี้

umount /dev/sdc1

ในที่สุดฟอร์แมตแฟลชไดรฟ์ใหม่

sudo mkfs -t vfat /dev/sdc1

ฉันพบสิ่งนี้ที่ง่ายและรวดเร็ว อย่าลืมลบไดร์ฟก่อนที่จะทำการฟอร์แมต


2
sudo mkfs -t vfat / dev / sdc1> บล็อกส่วนใหญ่พูดแบบนี้ แต่ผู้คนบอกว่ามันใช้งานไม่ได้ลองดูว่ามันใช้งานได้ไหม
ศูนย์หนึ่ง

8
ไม่ได้ต่อเชื่อม ... แต่mkfs.vfat 3.0.9 (31 Jan 2010) mkfs.vfat: unable to open /dev/sdb1
noob

มันใช้งานได้สำหรับฉันเพียงแค่ใช้ -I เพื่อสร้างพาร์ติชันขนาดใหญ่หนึ่งตัวและแทนที่จะเป็น / dev / sdc1, / dev / sdc แทน
mchid

ฉันลองวิธีอื่นทั้งหมด ( hdparm -r0, blockdev --setrw, remount,rw) แต่ไม่มีอะไรแก้ไขปัญหาของฉันยกเว้นสิ่งนี้!
Iman Mirzadeh

1
มันบอกว่าmkfs.vfat: unable to open /dev/sdc: Read-only file system
Shayan

14

คำตอบของ Angel นั้นดี แต่คำสั่งจริงไม่ใช่เรื่องง่ายสำหรับฉัน นี่คือสิ่งที่ใช้งานได้: เสียบการ์ด (ของฉันเป็นการ์ด SD ที่มีสวิตช์ป้องกันการเขียนด้วยตนเอง แต่สวิตช์ปิดอยู่และสามารถเขียนได้บนเครื่อง Windows) Ubuntu ติดตั้งมันโดยอัตโนมัติใน / media / andrew / 6AB0-1FD91 และ dmesg แสดงพาร์ติชั่นเป็น / dev / sdb1

ถอนติดตั้งและทำให้เขียนได้

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

สร้างจุดเชื่อมต่อใหม่และติดตั้งที่นั่น (userID ของฉันจาก / etc / passwd คือ 1,000)

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

ตอนนี้ฉันสามารถเขียนลงดิสก์ได้ในฐานะผู้ใช้ปกติของฉัน ฉันระมัดระวังในกรณีที่มันล้มเหลวจริง ๆ แต่คำสั่งเหล่านั้นอนุญาตให้ฉันทำสิ่งที่ฉันทำเสร็จ


หมายเหตุ: การ์ดของฉันล้มเหลว (อูบุนตูติดตั้งเป็นแบบอ่านอย่างเดียว แต่กล้องของฉันเขียนได้อย่างมีความสุข) สองสามเดือนต่อมามันเป็นไฟล์ที่เสียหายดังนั้นขณะนี้จะใช้งานได้โปรดระวัง!
andrew lorien

ฉันลอง stpes ของคุณรับ .... # sudo mount -o uid = 1000 / dev / sdc1 / mnt / เปิดได้เฉพาะ '/ dev / sdc1' เป็นแบบอ่านอย่างเดียวดิสก์มีระบบไฟล์ที่ไม่สะอาด (0, 0) ระบบไฟล์ไม่ได้ปิดอย่างปลอดภัยบน Windows เครื่องประกอบ
Ashish Karpe

1
ที่ทำงานสำหรับฉันและไม่มีของอื่น ๆ ดังกล่าวข้างต้น ...
ปิแอร์

1
สิ่งนี้ใช้ได้หลังจากลองวิธีแก้ปัญหาหลายอย่าง ขอบคุณ @andrewlorien
Abk

6

คำตอบเหล่านี้ไม่ได้ให้มาถูกต้อง

เพื่อให้ใช้งานได้จริงคุณสามารถแทนที่การตรวจจับดิสก์ USB ที่ประกาศว่าอ่านได้อย่างเดียวด้วยการตั้งค่า USB quirks นี่คือวิธีการทำงาน

1) เสียบอุปกรณ์ USB และทำlsusbเช่น:

$ lsusb
Bus 002 Device 012: ID 0781:5583 SanDisk Corp. 

2) จดรหัสสองรหัสระหว่างเครื่องหมายจุดคู่ (เรียกว่าidVendorและidProduct) ถอดปลั๊กอุปกรณ์ USB

3) ลบusb_storageโมดูลเคอร์เนล (สมมติว่ามันรวบรวมเป็นโมดูล)

$ sudo modprobe -r $(lsmod | sed -n 's:,: :g ; s,^usb_storage[ 0-9]*,,p') usb_storage

4) ตอนนี้เราจะนำโมดูลกลับมาใช้การตั้งค่าโหมด quirks เพื่อแทนที่การตรวจจับการตั้งค่าสถานะการเขียนเท่านั้นของอุปกรณ์

จากแหล่งที่มา / ไดรเวอร์ / 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)

ตอนนี้ไปเอาของคุณออกจากดิสก์นั้นทันทีมันล้มเหลว


ขอบคุณมากสำหรับคำตอบนี้ ฉันมีปัญหากับการ์ด Compact Flash ในตัวอ่าน USB ที่ดูเหมือนว่าจะป้องกันการเขียนและนี่เป็นทางออกเดียวที่ฉันพบว่าแก้ไขได้ สิ่งที่แปลกคือการ์ด CF อื่นทำงานได้ดี
njh

1

นี่เป็นบิตของคนเกียจคร้าน

ฉันลองทุกอย่างที่นี่ & ที่อื่น & ไม่มีอะไรทำงาน

จัดรูปแบบแล้วบนแล็ปท็อป Windows ของเพื่อน - ใช้งานได้ดีในขณะนี้ FFS!

เฮ้อ .... (สงสัยว่าตอนนี้ถ้าฉันสามารถแก้ไขมันใน Win 7 VM ของฉันบนมิ้นท์เดสก์ท็อปของฉันแทนได้ไหม?)


-1

ใส่เมมโมรี่สติ๊กและเริ่มต้นแยกส่วน เลือกผ่านปุ่มที่มุมขวาบน มันควรจะชัดเจนถ้าคุณกำลังตรวจสอบหน่วยความจำของคุณ (ขนาดเป็นเบาะแสที่ดี) เลือก Partition -> unmount

เลือก 'อุปกรณ์' ที่ด้านบนจากนั้น 'สร้างตารางพาร์ทิชัน' และใช้ค่าเริ่มต้นซึ่งเป็น msdos

ตอนนี้คุณควรจะสามารถสร้างพาร์ติชันใหม่และฟอร์แมต f32 ถ้าคุณทำไม่ได้

HTH


6
พาร์ติชันไม่สามารถแก้ไขได้เนื่องจากการป้องกันการเขียน
noob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.