Примечание: Основное внимание этого ответа на показ, когда система была загружена/завершена работу. Получение фактического пользователя, который выполнил завершение работы, немного более хитро. Лучшим способом я видел сделанный, должен ограничить доступ к системе и только дать определенные операторы sudo
права на shutdown
команда. Это даст Вам журнал того, кто работал что sudo
команда и в какое время они сделали это. Это намного выше затем, чтобы попытаться взломать shutdown
команда!
Большинству систем уже содержали эту информацию в их журналах, просто необходимо знать, что искать.
Файлы журнала /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
Для этого можно использовать who
команда. Конкретно с -b
переключатель.
$ who -b
system boot 2013-08-01 17:56
Это говорит в прошлый раз, когда система была загружена, был 01.08.2013.
Если Вы интересуетесь наблюдением более обширного списка предыдущих перезагрузок, можно использовать 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)
...
Можно использовать 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)
...
Файлы редко повреждаются сами по себе. Как правило, повреждение файловой системы является результатом основной аппаратной ошибки. Сообщение
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 + для проверки оперативной памяти.
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 на компьютере. Тогда его сообщение об ошибке будет ясно для просмотра.
Этот вопрос уже задавался некоторое время назад, но, возможно, он кому-то поможет.
Я только что столкнулся с такой же ошибкой при синхронизации с сервером. В моем случае на сервере отсутствовала папка, с которой я хотел синхронизироваться. Создание папки решило проблему.
Я считаю, что это происходит в основном при копировании массивных деревьев. Версия для Mac подключается к серверу, а затем создает список файлов. Если это занимает слишком много времени, сервер на другой стороне закрывает соединение, потому что оно слишком долго неактивно.
Новые версии rsync создают список файлов постепенно, поэтому копирование начинается почти мгновенно, и соединение никогда не простаивает. Двумя преимуществами являются:
Исправьте эту проблему в Mac OS X, установив более свежую версию rsync, например brew: brew install rsync
. Обновление версии 2.6.9 по умолчанию для Mac OS X до 3.1.3 устранило эту проблему.
Убедитесь, что целевой каталог существует на удаленном сервере. rsync
может компенсировать один уровень отсутствия каталогов, но если отсутствует более двух уровней каталогов, он выдаст ошибку, которую вы видите.