Làm thế nào tôi có thể bảo kernel linux bỏ qua hoàn toàn một đĩa như thể nó thậm chí không được kết nối?


18

Để ý

Vui lòng cuộn xuống để tìm câu trả lời (nó có vài điểm nhưng đó là câu đúng). Vấn đề được giải quyết bằng một bản vá sẽ có trong kernel 3.12.7 trở lên; Tôi hy vọng nó cũng sẽ được chuyển đến những người trước đó.

Máy tính xách tay của tôi là một serie Samsung Chronos s 7. Ubuntu Gnome Remix 13.04, với trình điều khiển được cập nhật của Intel.

Tôi gặp vấn đề với ổ SSD bên trong (dung lượng 8G). Nó không thành công với COMRESET và lỗi đầu vào / đầu ra. Tôi khá tin rằng vấn đề là phần cứng; Thật không may, tôi không cài đặt Windows trong máy tính xách tay để kiểm tra xem đó có phải là vấn đề về cấu hình SSD hay không.

Vấn đề là đĩa được udev nhận ra:

KERNEL[9.515930] add      /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb (block)
ACTION=add
DEVNAME=sdb
DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
DEVTYPE=disk
MAJOR=8
MINOR=16
SEQNUM=1785
SUBSYSTEM=block
UDEV_LOG=3

và sau đó nó thất bại trong rất nhiều kiểm tra, trì hoãn khởi động, trì hoãn tắt máy và làm cho (tôi nghĩ) đình chỉ là không thể.

Có thể bảo Linux bỏ qua hoàn toàn mọi thứ trên liên kết ata2 không? Tôi đã thử thêm dòng này vào /etc/udev/rules.d/10-local.rules

SUBSYSTEMS=="pci"  DRIVERS=="ahci" KERNELS=="ata2" OPTIONS=="ignore_device"

nhưng nó không hoạt động.

Mặt khác, nếu có ai biết cách thiết lập lại SSD nếu nó bị bỏ lại ở chế độ "bộ nhớ cache" mà không sử dụng Windows ... hoặc để khởi động một cửa sổ "trực tiếp" để làm điều tương tự ...

Cảm ơn!

Dữ liệu được thêm vào:

Đã udevadm info -a -n /dev/sdbdán đầy đủ vào http://paste.ubfox.com/6186145/

smartctl -i /dev/sdb -T permissive cho:

root@samsung-romano:/home/romano# smartctl -i /dev/sdb -T permissive
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-3.8.0-31-generic] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net

Vendor:               /1:0:0:0
Product:              
User Capacity:        600,332,565,813,390,450 bytes [600 PB]
Logical block size:   774843950 bytes
>> Terminate command early due to bad response to IEC mode page

Điều này rõ ràng là sai. Tuy nhiên:

root@samsung-romano:/home/romano# fdisk -b 512 -C 970 -H 256 -S 63 /dev/sdb
fdisk: unable to read /dev/sdb: Input/output error

(Dữ liệu SSD từ http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 ).

BỔ SUNG:

Tất cả điều này có thể là tác dụng phụ của Công nghệ phản hồi thông minh Intel không bị vô hiệu hóa trước khi cài đặt Linux không? Nếu có, làm thế nào tôi có thể kiểm tra nó khi cài đặt lại một cửa sổ trên máy? Hay đây là một phát súng trong bóng tối? (Trong bios, ổ SSD không hiển thị và không có gì về Intel SRT).

GIỚI THIỆU VỀ NHIỆM VỤ:

Tôi đã thay đổi tiêu đề của câu hỏi; Tôi không nghĩ rằng câu hỏi liên kết trả lời vấn đề của tôi. Tôi tích cực biết rằng SSD đang bị lỗi. Tôi đang hỏi liệu có thể bảo kernel linux không thăm dò nó không.


2
Nếu đĩa bạn muốn ẩn là "sdb", bạn có thể vui lòng đăng toàn bộ đầu ra của "udevadm thông tin -a -n / dev / sdb" không?
Raguet La Mã

1
Điều này không trùng lặp với câu hỏi được liên kết. Bạn có thể vui lòng bỏ đánh dấu nó là một bản sao? Tôi đã thay đổi tiêu đề để truyền đạt tốt hơn câu hỏi. Không phải là về kiểm tra SSD, là về một câu hỏi chung về quản lý đĩa trên Linux. Cảm ơn!
Rmano

1
Vấn đề với chỉ ... rút đĩa là gì?
Braiam


3
Braiam: đĩa SSD được hàn vào bo mạch chính.
Rmano

Câu trả lời:


14

Hai giải pháp ở đây: một là nhanh chóng để áp dụng, mặc dù chỉ giải quyết được một phần, một là giải pháp hoàn chỉnh nhưng yêu cầu bạn phải biên dịch kernel của riêng bạn.

Câu trả lời đúng là một bản vá kernel.

Robin H. Johnson đã viết một bản vá cho trình điều khiển hạt nhân SATA ( tìm thấy nó trong trang web trao đổi ngăn xếp Unix / Linux ) ẩn hoàn toàn ổ đĩa.

Cập nhật 1 Bản vá hiện đang ngược dòng (ít nhất là trong kernel ổn định 3.12.7), xem kho git . Tôi đã yêu cầu backport trong launchpad Ubuntu .

Cập nhật 2 Bản vá nằm trong kernel tiêu chuẩn cho Ubuntu Trusty Thar 14.04; vì vậy bây giờ chỉ cần bổ sung sau vào tham số khởi động.

Sau khi bản vá được cài đặt, thêm

 libata.force=2.00:disable

các tham số khởi động kernel sẽ ẩn đĩa khỏi kernel Linux. Kiểm tra kỹ xem số đó có đúng không; tìm kiếm tên thiết bị có thể giúp:

(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

Để thêm một tham số kernel (bot tạm thời và vĩnh viễn), bạn có thể kiểm tra Q & A này: Làm cách nào để thêm tham số khởi động kernel?

Cách giải quyết

Ít nhất vấn đề cho phép đình chỉ tiếp tục đã được giải quyết bởi người dùng Unix StackExchange Emmanuel trong /unix//a/103742/52205 . Khi root, hãy ra lệnh:

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

trước khi đình chỉ.

Để làm cho nó vĩnh viễn, hãy thêm tệp sau vào /etc/pm/sleep.d/và làm cho nó có thể thực thi được:

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

với nội dung:

#!/bin/sh

# Delete the failing disk so that it will not block suspend

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

... Và bây giờ hệ thống tạm dừng (và tiếp tục) một cách chính xác.


1
Cảm ơn bạn đã nhắc nhở về /sys/block/*/device/delete.
Michael Shigorin

@kikuto --- bản chỉnh sửa được đề xuất của bạn có vẻ hơi lạc đề, nhưng tôi đã thêm một liên kết đến cách thêm tham số khởi động kernel. Cảm ơn bạn.
Rmano

5

Bạn có thể thử tạo quy tắc udev với thông tin sau (đầu ra của thông tin udevadm -a -n / dev / sdb).

THÔNG TIN:

looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0':
    KERNELS=="1:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{rev}=="SSD "
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="6"
    ATTRS{model}=="SanDisk iSSD P4 "
    ATTRS{state}=="running"
    ATTRS{queue_type}=="none"
    ATTRS{iodone_cnt}=="0x309"
    ATTRS{iorequest_cnt}=="0x30a"
    ATTRS{queue_ramp_up_period}=="120000"
    ATTRS{timeout}=="30"
    ATTRS{evt_media_change}=="0"
    ATTRS{ioerr_cnt}=="0x1d6"
    ATTRS{queue_depth}=="1"
    ATTRS{vendor}=="ATA     "
    ATTRS{device_blocked}=="0"
    ATTRS{iocounterbits}=="32"

1) Tạo quy tắc udev.

  • sudo nano /etc/udev/rules.d/99-hide-ssd.rules

Bạn có thể thử khớp các khóa "SUBSYSTEMS" & "DRIVERS" và các thuộc tính "ATTRS {rev}" & ATTRS {model} , sau đó gán biến "UDISKS" để bỏ qua nó.

Nội dung của tệp 99-hide-ssd.rules sẽ là:

SUBSYSTEMS == "scsi", DRIVERS == "sd", ATTRS {rev} == "SSD", ATTRS {model} == "SanDisk iSSD P4", ENV {UDISKS_IGNORE} = "1"

Để lưu các thay đổi trong nano ... Ctrl+ O, sau đó Entervà cuối cùng Ctrl+ X.

2) Cuối cùng làm mới các quy tắc udev với:

  • sudo udevadm trigger

LƯU Ý: Với ENV {UDISKS_IGNORE} = "1", nó sẽ bỏ qua đĩa cho Ubuntu 12.10 & 13.04.
Đối với Ubuntu 12.04, biến sẽ là ENV {UDISKS_PRESENTATION_HIDE} = "1" .

Hi vọng điêu nay co ich.


Đã thử nó, vẫn còn sdb được phát hiện khi khởi động (và trì hoãn nó). Tôi nghĩ nên có một số tùy chọn tham số dòng kernel, nhưng tôi không thể tìm thấy bất cứ điều gì ... thở dài. Dẫu sao cũng xin cảm ơn.
Rmano

@Rmano ... Nếu bạn cố gắng chỉ khớp với khóa kernel?. quy tắc sẽ là KernEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... để xem đĩa có được phát hiện trong udev không.
Raguet La Mã

Tôi biết đó là rất nhiều thời gian trước đây. nhưng vấn đề này vẫn không có câu trả lời ... không có gợi ý nào hoạt động. Dù sao cũng cảm ơn tất cả các bạn.
Rmano

2

/server/112147/tell-ubfox-to-ignore-dead-hard-drive-during-boote gợi ý một phần:

Với quyền root, hãy mở /etc/udev/rules.d/60-persistent-st Storage.rules bằng trình soạn thảo văn bản yêu thích của bạn.

Một vài dòng xuống, bạn có thể sẽ thấy một dòng trông như thế này:

bỏ qua các quy tắc cho các thiết bị khối không phù hợp

KERNEL == "ram * | loop * | fd * | nbd * | GNBD * | dm- | md ", GOTO = "persistent_storage_end" Add "sdb *" với dòng thứ hai, vì vậy nó trông như thế này:

KernEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md | sdb *", GOTO = " continent_st Storage_end "

Lưu, khởi động lại, và có thể nó hoạt động. Nếu không, tốt, đây có phải là bảo hành sau?


Đã thử nó, không có may mắn. Vẫn có ổ sdb, vẫn chặn treo. Ngày xửa ngày xưa tồn tại một tùy chọn dòng lệnh sdb = bỏ qua kernel ... Và thật không may, đó là bảo hành sau.
Rmano

BTW, tôi không có tập tin đó, vì vậy tôi đã thêm nó ...
Rmano

2

Nếu các ổ đĩa khác của bạn không sử dụng ahci hoặc không phải SSD, bạn có thể xóa trình điều khiển kernel cho chúng.

để loại bỏ cho phiên đó (cho đến lần khởi động lại tiếp theo), hãy chạy:

sudo rmmod ahci

để tải lại, chạy:

sudo modprobe ahci

nếu bạn thấy mọi thứ đều ổn, bây giờ bạn có thể vô hiệu hóa hoàn toàn (không tải nó vào lần khởi động tiếp theo). mở tệp /etc/modprobe.d/blacklist.conf và thêm dòng sau:

blacklist ahci 

vào danh sách đen trình điều khiển ssd, chỉ cần thay thế ahci bằng sd


2
Điều đó sẽ để lại cho tôi một hệ thống mà không có bất kỳ ổ đĩa nào ... ổ đĩa chính được bật ata1, ssd bị lỗi trên ata2. Vô hiệu hóa chế độ ahci trong bios làm cho hệ thống không thể khởi động ...
Rmano

1

Từ những gì tôi biết, không có cách nào để xóa tin nhắn, ngoài việc xóa SSD của bạn.


Thật không may, SSD là (cho những gì tôi biết) được hàn vào bo mạch chính. Nó chỉ là chip 8G.
Rmano

Cắt một trong các đèn led trên chip, tốt nhất là tìm dòng + 5V và cắt nó bằng X-Acto?
K7AAY

... Nếu tôi chỉ biết con chip nào và nó ở đâu. Sau đó, tôi sợ rằng điều đó có thể tạo ra nhiều vấn đề hơn nữa (không có ba trạng thái ...).
Rmano

1

Tôi đã đi và viết một bản vá kernel cho bạn để thực hiện khả năng vô hiệu hóa một đĩa đơn khi khởi động, do đó bạn không cần bận tâm đến việc vô hiệu hóa nó trong udev hoặc chờ trong quá trình khởi động ban đầu.

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

Nên áp dụng cho nhiều hạt nhân rất dễ dàng (dòng trên nó đã được thêm 2013-05-21 / v3.10-rc1 *, nhưng có thể được áp dụng một cách an toàn mà không cần dòng đó).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.