ddrescue успешно скопировал с диска с поврежденными секторами на тот, который был отключен из массива еще в ноябре, правда, только после того, как я заменил блок питания. В /var/log/kern.log я увидел сотни неудачных команд WRITE FDMA QUEUE, поэтому вытащил блок питания с более новой машины, и после пересадки ddrescue заработал нормально. Для дисков 4 ТБ ушло около 10 часов. Он сообщил о 15 ошибках общим объемом 80 КБ. После завершения sdd выглядел точно так же, как и sdc, как и следовало ожидать, поэтому я собрал массив с sdb sdd и sde, затем добавил sdd и позволил ему восстановиться, что завершилось без ошибок. Фактически, SMART больше не сообщает о поврежденных секторах на sdd. Я предполагаю, что это связано с тем, что запись в эти сектора привела к перераспределению секторов на диске. Так что все хорошо, просто нужно заказать новый блок питания.
Точка .
не является специальным символом оболочки. Все свойства ссылок на каталоги .
и ..
касаются только структуры файловой системы, оболочка тут ни при чем. Обратите внимание, что даже там это не персонаж, а эти два конкретных имени. foo.txt
, .bar
и ...
являются обычными именами файлов, даже если имена, начинающиеся с точки, специально обрабатываются globs и ls
.
С другой стороны, ~
является обычным символом для файловой системы, но в оболочке Tilde Expansion обрабатывает его особым образом. Таким образом, ~
без кавычек в начале слова расширяется до домашнего каталога текущего пользователя, а ~foo
расширяется до домашнего каталога пользователя foo
.
(Конечно, оболочка знает о том, что такое .
и ..
, в том смысле, что при запуске cd..
из /tmp
текущий рабочий каталог отображается не как /tmp/..
, а как /
. Кроме того, в отличие от букв и _
, точка недопустима в именах переменных, например. ,
, %
и -
не являются.)
~
как отдельный --, не заключенный в кавычки -, интерпретируется оболочкой как домашний каталог. Когда вы его цитируете, эта интерпретация прекращается, так что это не похоже на обычные переменные.
.
и ..
— ссылки в файловой системе.
Итак, если вы попытаетесь использовать .
в программе на C (без оболочки ), это будет работать, как в:
#include <stdio.h>
int main(void) {
DIR *d;
struct dirent *dir;
d = opendir("."); /*<---------------See the. for current dir */
if (d) {
while ((dir = readdir(d)) != NULL) {
printf("%s\n", dir->d_name);
}
closedir(d);
}
return(0);
}
, тогда как если вы попробуете это с помощью ~
, (d = opendir("~");
), это не сработает.