Tôi đang viết một tập lệnh initramfs và muốn phát hiện các thanh USB càng nhanh càng tốt.
Khi tôi cắm một thanh USB 2.0, việc phát hiện lớp idVendor, idSản phẩm và USB xảy ra trong vòng 100 ms. Nhưng hệ thống con scsi không "đính kèm" cho đến khi khoảng 1 giây trôi qua và phải mất thêm 500 ms trước khi phân vùng được nhận diện đầy đủ.
Tôi giả sử rằng trình điều khiển cần phải đọc bảng phân vùng để phát hiện các phân vùng. Tại sao phải mất quá lâu? Tôi không hy vọng thời gian gửi / nhận của bạn sẽ dài như vậy hoặc thời gian truy cập của đèn flash sẽ mất rất nhiều thời gian.
Tôi đã thử 5 gậy từ các nhà cung cấp khác nhau và kết quả là như nhau.
[ 5731.097540] usb 2-1.2: new high-speed USB device number 7 using ehci-pci
[ 5731.195360] usb 2-1.2: New USB device found, idVendor=0951, idProduct=1643
[ 5731.195368] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5731.195372] usb 2-1.2: Product: DataTraveler G3
[ 5731.195376] usb 2-1.2: Manufacturer: Kingston
[ 5731.195379] usb 2-1.2: SerialNumber: 001CC0EC32BCBBB04712022C
[ 5731.196942] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[ 5731.197193] scsi host9: usb-storage 2-1.2:1.0
[ 5732.268389] scsi 9:0:0:0: Direct-Access Kingston DataTraveler G3 PMAP PQ: 0 ANSI: 0 CCS
[ 5732.268995] sd 9:0:0:0: Attached scsi generic sg2 type 0
[ 5732.883939] sd 9:0:0:0: [sdb] 7595520 512-byte logical blocks: (3.88 GB/3.62 GiB)
[ 5732.884565] sd 9:0:0:0: [sdb] Write Protect is off
[ 5732.884568] sd 9:0:0:0: [sdb] Mode Sense: 23 00 00 00
[ 5732.885178] sd 9:0:0:0: [sdb] No Caching mode page found
[ 5732.885181] sd 9:0:0:0: [sdb] Assuming drive cache: write through
[ 5732.903834] sdb: sdb1
[ 5732.906812] sd 9:0:0:0: [sdb] Attached SCSI removable disk
Chỉnh sửa Vì vậy, tôi đã tìm thấy tham số mô-đun delay_use theo mặc định được đặt thành 1 giây, điều này giải thích cho độ trễ mà tôi thấy. Nhưng tôi tự hỏi nếu ai đó có thể cung cấp bối cảnh như tại sao tham số đó là cần thiết? Một nhận xét gợi ý rằng đối với các thanh USB cũ hơn, delay_use có thể cần được đặt tối đa 5 giây. Những gì bên trong thanh usb mất rất nhiều thời gian; khởi tạo phần sụn; đọc từ đèn flash? Tôi thấy khó tin rằng chúng ta cần độ trễ miễn là 1 giây trở lên khi độ trễ để truy cập flash theo thứ tự hàng chục micro giây.
Tôi nhận ra rằng điều này có thể hơi lạc đề đối với kênh này, nếu vậy, tôi sẽ truy cập trang điện tử.stackexchange.com
/sys/module/usb_storage/parameters/delay_use
). Đối với các đĩa USB cũ hơn, có thể cần độ trễ giải quyết tối đa 5 giây, nhưng đối với lưu trữ trạng thái rắn hiện đại, có lẽ không cần thiết chút nào. Thật không may, kernel không thể biết rằng cho đến khi quá muộn để có ích!