Необъясненное разъединение rsync

Примечание: Основное внимание этого ответа на показ, когда система была загружена/завершена работу. Получение фактического пользователя, который выполнил завершение работы, немного более хитро. Лучшим способом я видел сделанный, должен ограничить доступ к системе и только дать определенные операторы sudo права на shutdown команда. Это даст Вам журнал того, кто работал что sudo команда и в какое время они сделали это. Это намного выше затем, чтобы попытаться взломать shutdown команда!

1. Парсинг файлов журнала

Большинству систем уже содержали эту информацию в их журналах, просто необходимо знать, что искать.

Файлы журнала /var/log/messages, /var/log/syslog (Ubuntu) или /var/log/secure (CentOS) будет обычно иметь это.

Примеры

$ sudo grep -iE "shutdown|boot" secure*
secure-20131215:Dec 14 02:08:56 greeneggs sudo:     saml : TTY=pts/6 ; PWD=/home/saml ; USER=root ; COMMAND=/sbin/reboot

2. В прошлый раз загруженная система?

Для этого можно использовать who команда. Конкретно с -b переключатель.

$ who -b
         system boot  2013-08-01 17:56

Это говорит в прошлый раз, когда система была загружена, был 01.08.2013.

3. Прошлые перезагрузки

Если Вы интересуетесь наблюдением более обширного списка предыдущих перезагрузок, можно использовать last команда.

$ last reboot | less
reboot   system boot  2.6.35.14-106.fc Thu Aug  1 17:56 - 02:03 (7+08:06)   
reboot   system boot  2.6.35.14-106.fc Thu Aug  1 09:41 - 17:55  (08:14)    
reboot   system boot  2.6.35.14-106.fc Thu Jul 25 15:24 - 17:55 (7+02:31)   
reboot   system boot  2.6.35.14-106.fc Thu Jul 18 18:05 - 15:23 (6+21:17)   
...

4. Прошлые завершения работы системы и изменения runlevel?

Можно использовать last команда для этого также. Необходимо будет использовать -x переключатель.

$ last -x | less
saml     pts/7        :pts/6:S.0       Sat Aug  3 21:30 - 21:30  (00:00)    
saml     pts/6        :0.0             Sat Aug  3 21:29 - 21:30  (00:01)    
saml     pts/4        :0.0             Fri Aug  2 21:49 - 22:16 (2+00:26)   
saml     pts/2        :0.0             Fri Aug  2 13:30 - 22:16 (2+08:45)   
saml     pts/1        :0.0             Fri Aug  2 13:05   still logged in   
saml     pts/0        :0.0             Fri Aug  2 12:37   still logged in   
saml     pts/0        :0.0             Fri Aug  2 12:35 - 12:37  (00:02)    
saml     pts/0        :0.0             Thu Aug  1 17:58 - 12:35  (18:36)    
saml     tty1         :0               Thu Aug  1 17:56   still logged in   
runlevel (to lvl 5)   2.6.35.14-106.fc Thu Aug  1 17:56 - 02:04 (7+08:08)   
reboot   system boot  2.6.35.14-106.fc Thu Aug  1 17:56 - 02:04 (7+08:08)   
shutdown system down  2.6.35.14-106.fc Thu Aug  1 17:55 - 17:56  (00:00)    
runlevel (to lvl 6)   2.6.35.14-106.fc Thu Aug  1 17:55 - 17:55  (00:00)    
saml     tty2                          Thu Aug  1 17:54 - down   (00:01)    
root     tty2                          Thu Aug  1 17:53 - 17:54  (00:00)    
...

Ссылки

2
04.02.2015, 21:25
4 ответа

Файлы редко повреждаются сами по себе. Как правило, повреждение файловой системы является результатом основной аппаратной ошибки. Сообщение

mount: cannot remount block device /dev/sda3 read-write, is write-protected

указывает, что ядро обнаружило аппаратную ошибку, и для предотвращения дальнейшего повреждения данных оно помечает базовое устройство только для чтения. Создание файловой системы только для чтения было побочным эффектом этого.

Невозможно переключить файловую систему обратно в режим «чтение-запись», поскольку блочное устройство по-прежнему доступно только для чтения. Вы можете сделать блок устройством для чтения-записи с помощью blockdev --setrw/dev/sda3 , а затем повторно подключить файловую систему для чтения-записи. Однако это плохая идея , как и перезагрузка и продолжение использования диска. Не игнорируйте эту ошибку: оборудование неисправно, и данные будут повреждаться все больше и больше.

Проверьте журналы ядра на наличие ошибок. Вы должны видеть шквал сообщений журнала. Журналы ядра часто хранятся в /var/log/kern.log , но расположение зависит от дистрибутива и конфигурации системы, поэтому проверьте документацию дистрибутива. Можно вызвать команду dmesg для печати журналов ядра, но только для текущего сеанса необходимо просмотреть файлы журнала для сообщений, полученных до последней перезагрузки.

Распространенными причинами отказа диска являются отказ фактического диска, свободный кабель или отказ ОЗУ. Запустите smartctl -a/dev/sda для просмотра диагностики диска. Если это не указывает на сбой, выполните команду memtest86 + для проверки оперативной памяти.

-121--108536-

cat < & 3 делает то, что он должен делать, а именно считывает из файла, пока он не достигнет конца файла. Когда вы вызываете его, позиция файла в дескрипторе файла находится в том месте, где вы в последний раз оставили его, а именно в конце файла. (Есть один файл позиции, не отдельные для чтения и для записи.)

cat/proc/$ $/fd/3 не делает то же самое, что cat < & 3 : он открывает один и тот же файл на другом дескрипторе. Поскольку каждый дескриптор файла имеет собственную позицию, а при открытии файла для чтения позиция устанавливается равной 0, эта команда печатает весь файл и не влияет на сценарий.

Если вы хотите прочитать написанное, необходимо либо открыть файл заново, либо перемотать дескриптор файла (т. е. установить его положение на 0). Нет встроенного способа сделать ни в оболочке POSIX, ни в большинстве реализаций sh ( есть один в ksh93 ). Существует только одна утилита, которая может искать: dd , но она может искать только вперед. (Есть другие утилиты, которые могут пропустить вперед, но это не помогает.)

Я думаю, что единственное портативное решение - запомнить имя файла и открыть его столько раз, сколько необходимо. Обратите внимание, что если файл не является обычным файлом, поиск в обратном направлении может быть невозможен.

-121--78202-

Возможно, сервер возвращает сообщение @ ERROR , но клиент вместо этого неправильно сообщает об этом как о преждевременном EOF.

Первым шагом является определение основной ошибки. Я предлагаю вам запустить rsync с более простыми флагами, чтобы увидеть, работает ли он. Возможно, rsync не может загрузить libz , но он не замечает, пока не придет время что-то сжать.

Второй шаг состоит в том, чтобы клиент на стороне Yosemite рассказал вам что-то о 8 байтах, которые он получил. Если добавление достаточного количества флагов -v не делает этого, я предлагаю создать новый rsync (например, используя Homebrew и homebrew/dups keg). Это может сказать вам что-то полезное, что относительно старая rsync в запасе OSX не делает.

Если вы не возражаете против его настройки, вы можете настроить демон rsync на компьютере Yosemite, использовать ssh -R , чтобы включить пересылку порта обратно к нему, и запустить rsync вручную в оболочке веб-узла, чтобы он подключился к демону rsync на компьютере. Тогда его сообщение об ошибке будет ясно для просмотра.

1
27.01.2020, 22:05

Этот вопрос уже задавался некоторое время назад, но, возможно, он кому-то поможет.

Я только что столкнулся с такой же ошибкой при синхронизации с сервером. В моем случае на сервере отсутствовала папка, с которой я хотел синхронизироваться. Создание папки решило проблему.

1
27.01.2020, 22:05

Я считаю, что это происходит в основном при копировании массивных деревьев. Версия для Mac подключается к серверу, а затем создает список файлов. Если это занимает слишком много времени, сервер на другой стороне закрывает соединение, потому что оно слишком долго неактивно.

Новые версии rsync создают список файлов постепенно, поэтому копирование начинается почти мгновенно, и соединение никогда не простаивает. Двумя преимуществами являются:

  • Отсутствие разъединений после ожидания, по истечении которого rsync подсчитает миллионы файлов.
  • Вы прогрессируете каждый раз, когда запускаете команду, даже если сетевое соединение ненадежно и время от времени отключается.

Исправьте эту проблему в Mac OS X, установив более свежую версию rsync, например brew: brew install rsync . Обновление версии 2.6.9 по умолчанию для Mac OS X до 3.1.3 устранило эту проблему.

1
27.01.2020, 22:05

Убедитесь, что целевой каталог существует на удаленном сервере. rsync может компенсировать один уровень отсутствия каталогов, но если отсутствует более двух уровней каталогов, он выдаст ошибку, которую вы видите.

0
27.01.2020, 22:05

Теги

Похожие вопросы