วิธีปิดการใช้งานเคอร์เนลโพรบสำหรับไดรฟ์


9

ฉันมีแล็ปท็อปซัมซุงที่มี ExpressCache SanDisk SSD ขนาด 30GB ที่บัดกรีบน mainbord SSD เสียชีวิต (ให้ข้อผิดพลาดมากมายเมื่อฉันพยายามเข้าถึงมัน) แต่มันยังถูกตรวจสอบในการบูตเคอร์เนลฉันเห็นว่ามันเป็นพาร์ติชั่นความสามัคคีของอูบุนตูแสดงไอคอนไดรฟ์ที่ไม่ได้ต่อเชื่อมในลิ้นชักแอป เนื่องจากการส่งคำสั่ง suspend ไปยังอุปกรณ์ ssd ล้มเหลว ฉันพยายามส่งผ่านพารามิเตอร์ sdb = noprobe kernel แต่ดูเหมือนว่าจะล้าสมัยไปแล้วใน 3.8.0 เคอร์เนล (Ubuntu 13.04) ฉันจะปิดใช้งานอุปกรณ์ sata ในเมล็ดล่าสุดได้อย่างไร

คำตอบ:


1

วิธีแก้ปัญหาสองข้อที่นี่: วิธีหนึ่งใช้ได้อย่างรวดเร็วแม้ว่าจะแก้ปัญหาเพียงบางส่วนเท่านั้นส่วนวิธีอื่นนั้นสมบูรณ์ แต่คุณต้องการคอมไพล์เคอร์เนลของคุณเอง

คำตอบที่ถูกต้องคือแพทช์เคอร์เนล

Robin H. Johnson เขียนแพตช์สำหรับไดรเวอร์เคอร์เนล SATA ( ค้นหาได้จากไซต์แลกเปลี่ยนสแต็กของ Unix / Linux ) ซึ่งซ่อนไดรฟ์ไว้อย่างสมบูรณ์

อัพเดทแพทช์อยู่ในขณะนี้ต้นน้ำ (อย่างน้อยใน 3.12.7 มั่นคงเคอร์เนล) ดู ที่เก็บคอมไพล์ ผมขอย้ายกลับใน Launchpad

เมื่อติดตั้งแพตช์แล้วให้เพิ่ม

 libata.force=2.00:disable

พารามิเตอร์บูตเคอร์เนลจะซ่อนดิสก์จากเคอร์เนล Linux ตรวจสอบอีกครั้งว่าหมายเลขถูกต้อง การค้นหาชื่ออุปกรณ์สามารถช่วยได้:

(0)samsung-romano:~% dmesg | grep iSSD
[    1.493279] ata2.00: ATA-8: SanDisk iSSD P4 8GB, SSD 9.14, max UDMA/133
[    1.494236] scsi 1:0:0:0: Direct-Access     ATA      SanDisk iSSD P4  SSD  PQ: 0 ANSI: 5

วิธีแก้ปัญหา

ตอบโดยผู้ใช้ Unix StackExchange Emmanuel ในhttps://unix.stackexchange.com/a/103742/52205

อย่างน้อยคุณสามารถแก้ปัญหาการระงับได้โดยการออกคำสั่ง

echo 1 > /sys/block/sdb/device/delete

ก่อนระงับ

หากต้องการทำให้เป็นอัตโนมัติฉันได้เพิ่มไฟล์ต่อไปนี้: (โปรดสังเกตว่าแฟล็กนั้นจะต้องสามารถเรียกใช้งานได้)

-rwxr-xr-x 1 root root 204 Dec  6 16:03 99_delete_sdb

ในไดเรกทอรี /etc/pm/sleep.d/

#!/bin/sh

# Tell grub that resume was successful

case "$1" in
    suspend|hibernate)
        if [ -d /sys/block/sdb ]; then
            echo Deleting device sdb 
            echo 1 > /sys/block/sdb/device/delete       
        fi
        ;;
esac

... และตอนนี้ระบบระงับ (และดำเนินการต่อ) อย่างถูกต้อง ฉันเพิ่มตัวอย่าง

if [ -d /sys/block/sdb ]; then
      echo Deleting device sdb 
      echo 1 > /sys/block/sdb/device/delete     
fi

เพื่อ/etc/rc.localเกินไปสำหรับการวัดที่ดี


ขอบคุณ @Rmano เสียงสะท้อนทำงานได้ดี แต่มันไม่ชัดเจนฉันควรจะวาง99_delete_sdbไฟล์ปฏิบัติการที่ไหน? ใน/etc/rc0.d/อาจจะ?
Sergey Melekhin

ขออภัย --- เพิ่มข้อมูลที่เกี่ยวข้อง
Rmano

5

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

http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch

ควรนำไปใช้กับเมล็ดจำนวนมากได้อย่างง่ายดาย (บรรทัดด้านบนมันถูกเพิ่ม 2013-05-21 / v3.10-rc1 * แต่สามารถใช้ได้อย่างปลอดภัยด้วยตนเองโดยไม่มีบรรทัดนั้น)


1
ขอบคุณสำหรับความพยายามของคุณ. บางทีคุณสามารถแสดงความคิดเห็น (สำหรับผู้ที่ไม่คุ้นเคยกับเคอร์เนลแพทช์) วิธีใช้แพตช์และวิธีใช้ (อาจsdb=disableเป็นพารามิเตอร์เคอร์เนล)
mpy

1
kernel.org/doc/Documentation/applying-patches.txtครอบคลุมการใช้เคอร์เนลแพตช์โดยทั่วไป แต่การกระจายจำนวนมากมีวิธีการเฉพาะของการใช้แพทช์ โปรแกรมแก้ไขนี้ใช้การบังคับ 'ปิดใช้งาน' การตั้งค่าสถานะสำหรับ libata โดยเฉพาะอย่างยิ่ง ผู้ใช้จะต้องใช้กับ libata.force = ID: ปิดการใช้งานโดยที่ ID คือตัวเลขหรือ number.number tuple ที่ระบุไดรฟ์ที่เป็นปัญหา
robbat2

ฉันไม่ทราบว่าคำแนะนำนี้: wiki.ubuntu.com/Kernel/BuildYourOwnKernelเป็นรุ่นล่าสุดหรือไม่ ผมจะพยายามถ้าฉันสามารถในสัปดาห์นี้ ...
Rmano

ในกรณีของแล็ปท็อป Samsung คำสั่งน่าจะเป็น "libata.force = 2.00: ปิดการใช้งาน" ( grep iSSD /var/log/syslogควรให้คำแนะนำแก่คุณ)
Rmano

1
FYI มันถูกรวมเข้ากับเคอร์เนลสำหรับ 3.13 รวมถึงแผนผังเคอร์เนลที่เสถียร ตัวเลือกที่ไม่สามารถยอมรับได้
robbat2

0

ฉันค้นคว้ามาแล้วและพบวิธีแก้ปัญหาที่สามารถติดตั้งได้ง่ายบน Ubuntu Distro ใช้ kmod ดังนั้นสิ่งต่อไปนี้ควรใช้งานได้ดีกับ distro ที่ใช้ kmod

คุณจะต้องขึ้นบัญชีดำหากคุณต้องการปิดการใช้งานอุปกรณ์ SATA ทั้งหมดทั้งนี้ขึ้นอยู่กับว่าคุณใช้ไดรเวอร์ใด ลองlsmod | grep sataและดูว่าคุณใช้ไดรเวอร์ตัวใดอยู่ จากนั้นในการ/etc/modprobe.d/สร้างไฟล์ใหม่ของคุณด้วยecho blacklist (module) > blacklist.confเพื่อเพิ่มไปยังบัญชีดำ สร้าง initramfs ของคุณใหม่mkinitramfsเพื่อให้มีผล Reboot

หรือเพียงเพิ่มmodprobe.blacklist=(module)พารามิเตอร์เคอร์เนลของคุณ


1
มันจะปิดการใช้งานอุปกรณ์ sata ทั้งหมดรวมถึงฮาร์ดไดรฟ์ดังนั้นแล็ปท็อปของฉันจะไม่บูตอีกต่อไป และการรองรับ sata ถูกคอมไพล์ลงในเคอร์เนล (ไม่ใช่โมดูล) ดังนั้นฉันไม่สามารถขึ้นบัญชีดำได้
Sergey Melekhin

เอาล่ะเพื่อให้แล้วเพียงแค่เปิดแล็ปท็อปของคุณและลบไดรฟ์ ...
เฮ็กเตอร์

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