I have samsung laptop with 30GB ExpressCache SanDisk SSD soldered on mainbord. SSD died (gives tons of errors when i try to access it somehow), but it is still probed on kernel boot, i see it's partition, ubuntu's unity shows unmounted drive icon in app drawer, and worst of all I can't suspend laptop, because sending suspend command to ssd device fails. I tried to pass sdb=noprobe kernel parameter, but it looks like it is obsoleted long ago in 3.8.0 kernel (Ubuntu 13.04). How can I disable sata device in recent kernels?
Two solutions here: one is fast to apply, although solves the problem only partially, the other one is the complete one but requires you to compile your own kernel.
The correct answer is a kernel patch.
Robin H. Johnson wrote a patch for the SATA kernel driver (find it in Unix/Linux stack exchange site) which hides completely the drive.
Once the patch is installed, adding
to the kernel boot parameters will hide the disk from the Linux kernel. Double check that the number is correct; searching for the device name can help:
(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
Answered by Unix StackExchange user Emmanuel in https://unix.stackexchange.com/a/103742/52205
You can at least solve the suspend problem by issuing the command
echo 1 > /sys/block/sdb/device/delete
To automate it, I added the following file: (note the flags, it must be executable)
-rwxr-xr-x 1 root root 204 Dec 6 16:03 99_delete_sdb
in the directory
#!/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
...and now the system suspends (and resume) correctly. I added the snippet
if [ -d /sys/block/sdb ]; then echo Deleting device sdb echo 1 > /sys/block/sdb/device/delete fi
/etc/rc.local too, for good measure.
I went and wrote a kernel patch for you that implements the ability to disable a single disk at boot time, so that you don't need to bother with disabling it in udev, or the waiting during the initial boot.
Should apply to many kernels very easily (the line above it was added 2013-05-21/v3.10-rc1*, but can be safely applied manually without that line).
I have researched this and found a solution that can be implemented quite easily on Ubuntu. The distro uses kmod, so the following should work fine on that and any distro that uses kmod.
Depending on what driver you're using, you will need to blacklist it if you want to disable all SATA devices. Try
lsmod | grep sata and figure out which driver(s) you're using. Then in your
/etc/modprobe.d/ create a new file with
echo blacklist (module) > blacklist.conf to add it to the blacklist. Rebuild your initramfs with
mkinitramfs for it to take effect. Reboot.
Alternately, just add
modprobe.blacklist=(module) to your kernel parameters.