"I've checked the SATA cables and they seem alright, unplugged them and plugged them in again"
У меня была та же проблема дома, но она решилась только заменой кабелей sata. Так же, как и вы, они казались в порядке физически, но что-то было не так внутри них. Не судите о кабеле, просто взглянув на него. И эти ошибки
ata
раздражают, и они могут появиться практически ОТКУДА, даже из вашего блока питания. Пример:... I first thought it was a problem of the SATA controller or cables so I switched the drives around, yet the same drive was still affected. I then assumed it was related to the drive which got me sidetracked for a while, till I routinely decided to reset the BIOS. Doing so I randomly had a look at the supply voltages, the 12V rail had dropped to around 10.2V... ...It really was an annoying experience and the symptoms were highly misleading. After all the drive was fine, and it was just the manifestation of a completely different problem. From now on I will routinely check lm-sensors for voltages as well....
В вашем конкретном сценарии я бы провел устранение неполадок следующим образом.
Сначала обо всем по порядку (, потому что,
mdraid
):
- Проверьте в BIOS, является ли ваш контроллер диска FakeRAID , и проверьте, включен ли режим рейда в вашей установке. Измените его на Sata AHCI и переустановите систему. Общеизвестно (, и даже у Red Hat есть документ о ), что режим рейда FakeRAID может испортить настройки
mdraid
. Это не может решить проблему, но позволит избежать головной боли в ближайшем будущем .После проверки SATA:
- Замените кабели SATA. В наши дни они довольно недорогие, если только Supermicro не использует какой-то «фирменный» разъем на материнской плате.
- Обновите встроенное ПО твердотельного накопителя и контроллера диска. Ваша проблема (
failed command: WRITE FPDMA QUEUED
,Emask 0x4 (timeout)
)кажется тесно связанной с этим, но с другим оборудованием :[решена] "неудачная команда :WRITE FPDMA QUEUED" ошибки ATA- Одолжите запасной блок питания у друга, обратив внимание на его технические характеристики, и попробуйте заменить его.
- Обратитесь в supermicro и попросите обратиться в службу поддержки для вашей материнской платы, так как вы выполнили все основные действия.
- После всего этого замените диски.
Я не знаю, как заставить ls
делать то, что вы хотите. В зависимости от того, что вы ищете, вы можете создать сценарий, демонстрирующий такое поведение.
Было бы много работы, чтобы получить все прибамбасы и свистки, которые ls
имеют в дополнение к этому поведению, но вы могли бы получить только такое поведение довольно легко.
Вот пример такого скрипта:
#!/bin/bash
function age() {
local -r last_modification="${1}"
local -r now="$(date +%s)"
local -r seconds="$((now - last_modification))"
if [[ ${seconds} -lt 60 ]]; then
printf "%s seconds ago" "${seconds}"
return
fi
local -r minutes="$((seconds / 60))"
if [[ ${minutes} -lt 60 ]]; then
printf "%s minutes ago" "${minutes}"
return
fi
local -r hours="$((minutes / 60))"
if [[ ${hours} -lt 24 ]]; then
printf "%s hours ago" "${hours}"
return
fi
local -r days="$((hours / 24))"
if [[ ${days} -lt 365 ]]; then
printf "%s days ago" "${days}"
return
fi
local -r years="$((days / 365))"
printf "%s years ago" "${years}"
}
function list_file() {
local -r target_file="${1}"
local -r last_modification="$(stat --format=%Y "${target_file}")"
stat --format="%A %2h %-8U %-8G %5s $(printf "%-14s" "$(age "${last_modification}")") %n" "${target_file}"
}
if [[ $# -eq 0 ]]; then
for i in *.*; do
list_file "${i}"
done
else
for i; do
list_file "${i}"
done
fi
Вот пример выполнения:
$ myls
-rw------- 1 user group 9061 3 days ago .bash_history
-rw-r--r-- 1 user group 127 2 years ago .bash_logout
-rw-r--r-- 1 user group 611 1 years ago .bashrc
drwxr-xr-x 4 user group 4096 155 days ago .cache
-rw------- 1 user group 40583 5 hours ago .histfile
-rw------- 1 user group 703 1 minutes ago .lesshst
...
$
$ myls myls
-rwxr-xr-x 1 user group 1127 2 minutes ago myls
$
Если вы укажете параметры скрипта, он выведет список этих параметров, в противном случае он выведет список содержимого текущего каталога.
Он использует stat
для получения традиционных полей, представленных ls
. Вместо отображения даты он использует функцию age
для вывода строки «дружественно, x единиц времени назад». Эта функция может быть улучшена в зависимости от того, что конкретно вы хотите увидеть.