Используйте printf
вместо echo
:
$ cat 442817.sh
#!/bin/bash
numbers=(120,900 1160,001 80,730 600,165 6,310 1111,203)
for n in "${numbers[@]}"; do
printf "%10s\n" "$n"
done
$./442817.sh
120,900
1160,001
80,730
600,165
6,310
1111,203
Кажется, я уже отвечал на этот вопрос, но сейчас не могу его найти...
Если проблема сохраняется не только во время первоначальной загрузки, но и при горячем подключении неисправного диска к уже работающей системе, то вам более или менее не повезло.
При полной установке Linux практически невозможно предотвратить сканирование диска на наличие разделов, UUID и других метаданных при каждом его подключении. Ядро определяет таблицы разделов, udev создает ссылки disk/by -uuid и так далее.
Однако поддержка таблицы разделов не является обязательной в ядре (CONFIG_*_PARTITION
, *
является одним из MSDOS
, EFI
, MAC
,... ). Таким образом, вы можете скомпилировать собственное ядро, которое не поддерживает ни одно из них или отключает их все, а затем (, чтобы также предотвратить сканирование UUID и тому подобное ), использовать его с минимальной средой initramfs, которая содержит только ddrescue.
Это также запрещает вам доступ к разделам на любом из ваших других дисков, если вы не эмулируете его с помощью losetup
и смещения / размера, или, альтернативно, сопоставителя устройств (dmsetup
). Так что вам придется обойти отсутствие разделов в целом.
- to limit the number of retries?
Не уверен, что он делает какие-либо повторные попытки, что вы можете сделать, это установить тайм-ауты (в /sys/block/*/device/timeouts
), которые, я думаю, будут полезны только в том случае, если диск вообще не отвечает.
Для встроенных -несъемных -устройств можно также использовать параметр ядра libata.force=<port.device>:disable
, чтобы полностью отключить его.