Làm thế nào để nói với Linux Kernel> 3.0 hoàn toàn bỏ qua một đĩa bị lỗi?


23

Tôi có một máy tính xách tay Samsung (Chronos s7) với một đĩa SATA cứng trên xe buýt ata:1, được phát hiện như /dev/sda, một SSD 8G trên ata:2, /dev/sdbvà các thiết bị khác nhau trên phần còn lại của giao diện SATA.

Vấn đề là đĩa SSD

  • hàn vào bảng chính (không thể di chuyển)
  • bị hỏng (nó chỉ đưa ra lỗi I / O cho bất kỳ hoạt động nào)
  • nó không xuất hiện trong bios (có lẽ vì nó bị hỏng)

Bây giờ đĩa này:

  • trì hoãn khởi động ba đến năm phút để cố gắng thăm dò đĩa bị lỗi, điều này gây khó chịu;
  • nhưng điều khó chịu nhất là hệ thống không thể tạm dừng do lỗi /dev/sdb.

Lưu ý rằng tôi có thể sống với sự chậm trễ khi khởi động --- điều khiến tôi lo lắng là sơ yếu lý lịch / đình chỉ.


Vì vậy, câu hỏi là: tôi có thể nói với kernel để tránh việc thăm dò thiết bị trên ata: 2 không?

Trong kernel cũ hơn (<3.0), khi tôi vẫn có thể đào một chút vào nguồn, có một tham số dòng lệnh của kiểu hdb=ignoresẽ thực hiện thủ thuật.

Tôi đã thử tất cả các thủ thuật được đề xuất dưới đây với các tham số kernel udevlibata:forcekhông có kết quả. Cụ thể, những điều sau đây không hoạt động:

  1. Thêm vào một trong các /etc/udev/rules.d/tệp sau (thực hiện sớm như 00-ignoredisk.ruleshoặc trễ 99-ignoredisk.ruleshoặc ở cả hai nơi)

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

    cũng không

    KERNEL=="sdb", ENV{UDISKS_IGNORE}="1"
    

    cũng không có nhiều giải pháp trung gian --- điều này làm cho đĩa không thể truy cập được sau khi khởi động, nhưng nó được kiểm tra khi khởi động và vẫn được kiểm tra khi tạm dừng --- khiến cho việc tạm ngưng không thành công.

  2. Chỉnh sửa các tệp hệ thống /lib/udev/rules.d/60-persistent-storage.rules(và udisks, udisks2) thay đổi

    KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md", GOTO="persistent_storage_end"
    

    đến

    KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md|sdb*", GOTO="persistent_storage_end"
    

    một lần nữa, điều này có một số hiệu ứng, che giấu đĩa từ không gian người dùng, nhưng đĩa vẫn hiển thị với kernel.

  3. Khởi động với tất cả các kết hợp có thể (tốt, rất nhiều trong số chúng) của các libata:forcetham số (ví dụ được tìm thấy ở đây ) để tắt DMA, tốc độ thấp hơn hoặc bất cứ điều gì về đĩa hỏng --- không hoạt động. Tham số được sử dụng, nhưng đĩa vẫn bị thăm dò và thất bại.

    Đã 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 ).


Xin lỗi nếu điều này quá rõ ràng, nhưng vì bạn chưa bao gồm trong câu hỏi của mình: bạn đã chắc chắn rằng tên thiết bị hoặc UUID không được liệt kê trong /etc/fstab? Bởi vì độ trễ khi khởi động có thể được gây ra trước đó bởi kernel hoặc udev, có vẻ như là trường hợp, nhưng cũng muộn hơn bởi fsck, khi đọc fstab.
Teresa e Junior

Có, không có đề cập đến / dev / sdb (hoặc phân vùng của nó) trong các tệp hệ thống. Sự chậm trễ thậm chí trước khi init bắt đầu ... nó ở trạng thái kthread (vì quá trình khởi động tiếp tục song song), nhưng nó ở mức cơ bản hơn. Nhưng thực sự độ trễ khởi động là vấn đề ít hơn --- nếu tôi có thể bỏ qua đĩa trong quá trình tạm dừng / tiếp tục để tạm dừng hoạt động, tôi sẽ rất vui. (dù sao cũng cảm ơn bạn).
Rmano

Bạn đang sử dụng trong initrd? nếu vậy là của ai?
hildred

@hildred: Tôi đang sử dụng kernel stock và initramfs từ Ubuntu 13.04. Tôi có thể vô hiệu hóa AHCI hoặc tất cả SATA ở đó, nhưng sau đó hệ thống của tôi đã chết --- không có đĩa nào cả.
Rmano

Debian (và Umbutu) biên dịch hệ thống con ata dưới dạng mô-đun. Bạn đã thử thiết lập các tham số cho mô-đun khi nó được tải bởi initrd chưa?
hildred

Câu trả lời:


26

libatahoàn toàn không có tùy chọn nopcoat; đó là một tùy chọn IDE kế thừa ...

Nhưng tôi đã đi và viết một bản vá kernel cho bạn thực hiện nó. Nó 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 đó).

Cập nhật Bản vá hiện đang ngược dòng (ít nhất là trong kernel ổn định 3.12.7). Nó nằm trong kernel tiêu chuẩn được phân phối với Ubuntu 14.04 (dựa trên ổn định 3.13).

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 ích (rõ ràng, bạn phải kiểm tra thông điệp kernel trước khi thêm các tham số khởi động):

(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

Số quan trọng là ata2.00trong dòng đầu tiên ở trên.


Cảm ơn rất nhiều. Tôi sẽ cố gắng kiểm tra nó ngay khi tôi có thể nhớ cách biên dịch và cài đặt kernel trên Ubuntu của mình. Thật không may, tôi sẽ có một tuần rất phức tạp ...
Rmano

1
+1 Rõ ràng là tốt hơn so với thủ thuật tôi đã đăng. Tôi hy vọng nó sẽ trở thành chính thức.
Emmanuel

1
Ok, đã thử bản vá. Nó hoạt động. Nếu bạn cần đẩy nó ngược dòng, tôi có thể thêm Tested-by: vào bản vá --- bạn có email thật của tôi trong hồ sơ của tôi. Tôi đã cài đặt nó theo (với quirks) các hướng dẫn trong wiki.ubfox.com/Kernel/BuildYourOwnKernel .
Rmano

1
@ illuminÉ --- chỉ cần chỉnh sửa câu trả lời theo nghĩa đó --- chờ nó được phê duyệt.
Rmano

1
Một lý do khác để yêu GENTOO !!
Eyoung100

15

Vấn đề phần cứng có giải pháp phần cứng vật lý. Bạn đã xem xét để hàn hoặc cắt nguồn cung cấp năng lượng của ổ đĩa?

EDIT: Ok nếu đó không phải là một tùy chọn mà mọi người đang sử dụng trước đây để cắm nóng ổ cứng. Bạn có thể sử dụng nó để vô hiệu hóa ổ đĩa của bạn.

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

Lưu ý rằng bất kỳ quy trình nào khác cũng có thể buộc quét bus SATA, và sau đó làm cho nó trở lại. Cố gắng làm điều đó ngay trước khi ngủ đông máy tính xách tay.

Chỉnh sửa bởi OP: nó đã làm việc . Tôi đã thêm các tập tin sau:

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

với nội dung:

#!/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

... 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
Nếu chỉ có nó là sự thật. Tôi thậm chí không thể nói chip nào (hoặc chip) là ổ SSD --- hầu hết không được đánh dấu. Và việc không cung cấp chip là không an toàn --- còn các chân ba trạng thái chưa được xử lý thì sao? Tôi mở máy tính xách tay với hy vọng rằng ổ SSD đã được kết nối trên một số loại bảng con. Không may mắn. (Và bên cạnh đó, hầu hết những khó khăn trong việc viết trình điều khiển kernel là làm việc xung quanh hw được thiết kế xấu).
Rmano

@Rmano Làm thế nào để thực hiện thủ thuật "xóa"?
Emmanuel

CÔNG TRÌNH CNTT --- Tôi có thể tạm dừng sau thủ thuật "xóa". Cảm ơn rất nhiều. (Nó vẫn trì hoãn khởi động, nhưng --- không phải là vấn đề).
Rmano

Cảm ơn rất nhiều vì đã nhắc nhở về delete.
Michael Shigorin

3

BIOS

Thiết bị này không hiển thị theo bất kỳ cách nào thông qua BIOS của bạn?

Thông thường, các ổ cứng được cấu hình ở chế độ "tự động", tôi sẽ xem qua và đảm bảo rằng các thiết bị này ở trạng thái bị vô hiệu hóa và thậm chí đi đến mức chỉ bật rõ ràng một ổ cứng và vô hiệu hóa mọi thứ khác.

Tùy chọn khởi động hạt nhân

Thông thường, bạn có thể vô hiệu hóa các hệ thống con khác nhau được tự động phát hiện bằng cách khởi động Linux Kernel thông qua việc sử dụng các tùy chọn khởi động khác nhau có thể được chuyển cho nó dưới dạng các công tắc.

Hầu hết nếu không phải tất cả các tùy chọn được liệt kê ở đây:

Linux trong một cuốn sách Nutshell

Bạn có thể muốn đọc lướt qua cuốn sách O'Reilly, Linux Kernel in a Nutshell , cụ thể, Chương 7: Tùy chỉnh hạt nhân .

Cuốn sách này được cung cấp miễn phí bởi tác giả của nó, Greg Kroah-Hartman, trên trang web cá nhân của mình. Toàn bộ cuốn sách có thể được tải xuống là tốt.


Không, BIOS không có bất kỳ dấu vết nào của đĩa này; Tôi có thể thấy ổ cứng và DVD và không còn nữa. Trước khi thất bại, trong Windows (hiện tại không còn cửa sổ nào trong hệ thống), nó đã được sử dụng làm bộ đệm tăng tốc cho đĩa chính. Tôi đã cố gắng đặt chế độ AHCI thành di sản, tắt, có hoặc tự động (cho tất cả các đĩa) nhưng điều đó không thay đổi bất cứ điều gì hoặc (tắt) chỉ đơn giản là làm cho hệ thống không khởi động.
Rmano

Phương pháp khác mà tôi đã sử dụng trước đây là khi Kernel khởi động để báo cho nó thông qua Grub (tùy chọn khởi động kernel) tới noide=..... Có rất nhiều tùy chọn khác mà bạn có thể cung cấp cho kernel khởi động để vô hiệu hóa tự động phát hiện phần cứng.
slm

đĩa là SATA (scsi), không có IDE. Và các hdb=noprobetùy chọn đã không chuyển qua cơ sở cho scsi (tôi nghĩ rằng nó đã bị loại bỏ vào khoảng 2.6.x), vì vậy nó không tồn tại (ngay khi tôi biết) một sdb=noprobehoặc ata:2=noprobetùy chọn. Tôi đã đọc (gần như) tất cả các kernel-parameters.txttệp trong nguồn kernel và tôi không thể tìm thấy tham số chính xác. Nếu bạn biết bất cứ ai, xin vui lòng nói với nó trong một câu trả lời --- tôi sẽ thực sự biết ơn.
Rmano

@Rmano - Tôi sẽ phải đào thêm để tìm thấy nó, tôi nhớ một số tùy chọn liên quan đến phát hiện ổ cứng và xe buýt, nhưng không nằm ngoài đỉnh đầu của tôi.
slm

@Rmano - những gì về tùy chọn:libata.dma=
slm

0

Cách Linux để kiểm tra khóa: sudo hdparm -I /dev/sdX(với X = a..z; bạn phải biết ổ đĩa của bạn là gì, tất nhiên). Ở cuối đầu ra (lớn), bạn PHẢI có thể đọc ở 10 dòng cuối cùng : *not* locked.

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.