Я нашел путь. Я использовал статистику GNU (stat (GNU coreutils) 8.19
) для рассмотрения "Доступа" "Измените" и метки времени "Изменения" файла.
Я мог обновить время "Изменения" путем выполнения a chmod u+x
на файле. "Измените" и метки времени "Доступа" остались тем же.
Я мог обновить файл "Доступа" путем выполнения a cat
на нем. "Измените" и метки времени "Изменения" остались тем же.
Я записал маленькую программу C, которая просто делает open(filename, O_WRONLY);
, пишет единственный байт в дескриптор файла, и затем a close(filedes);
на получающемся дескрипторе файла. stat
не показал изменения на метке времени "Доступа" подчиненного файла, но "Измените", и метки времени "Изменения" были обновлены.
Это было всем в соответствии с Linux 3.5.4, справедливо недавно Дуга обновления ноутбук Linux, в файловой системе Ext4.
Маленькая программа C:
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int
main(int ac, char **av)
{
int fd = open(av[1], O_WRONLY);
if (fd >= 0)
{
char buf[12];
write(fd, buf, 1);
if (close(fd) < 0)
fprintf(stderr, "Problem closing file: %s\n",
strerror(errno));
} else {
fprintf(stderr, "Problem opening \"%s\": %s\n",
av[1], strerror(errno));
}
return 0;
}
Я испытывал ту же проблему, таким образом, я провел некоторое исследование. Я нашел это:
/etc/smartd.conf
# smartd will re-read the configuration file if it receives a HUP
# signal
# The file gives a list of devices to monitor using smartd, with one
# device per line. Text after a hash (#) is ignored, and you may use
# spaces and tabs for white space. You may use '\' to continue lines.
# You can usually identify which hard disks are on your system by
# looking in /proc/ide and in /proc/scsi.
# The word DEVICESCAN will cause any remaining lines in this
# configuration file to be ignored: it tells smartd to scan for all
# ATA and SCSI devices. DEVICESCAN may be followed by any of the
# Directives listed below, which will be applied to all devices that
# are found. Most users should comment out DEVICESCAN and explicitly
# list the devices that they wish to monitor.
Я предполагаю что, не регистрируя диск от ядра через
root@localhost# echo 1 > /sys/block/sdX/device/delete
затем удаляя запись устройства из/etc/smartd.conf,
затем выполнение "sudo сервис smartmontools перезапуск" устранит Вашу проблему, и smartd прекратит сообщать о недостающем диске.
Вы можете вызвать Smartd в , только отслеживает определенный набор устройств, явно перечислив эти устройства в /etc/smartd.conf, а не используя Устройстваsan
ключевое слово.
Итак, для того, чтобы только монитор / dev / sda и / dev / sdb вы бы удалили с вашего smartd.conf:
DEVICESCAN -m root -M exec /usr/share/smartmontools/smartd-runner
и вместо этого добавьте:
/dev/sda -m root -M exec /usr/share/smartmontools/smartd-runner
/dev/sdb -m root -M exec /usr/share/smartmontools/smartd-runner
, затем перезагрузите демон Smartd.
Основным недостатком этого подхода является то, что вам нужно перечислить каждый диск индивидуально в конфигурации. По крайней мере, только с двумя дисками, это не слишком много хлопот.
В моем случае после замены неисправного жесткого диска помогает просто удалить csv и перезапустить службу:
sudo systemctl stop smartmontools
sudo killall smartd
cd /var/lib/smartmontools
sudo rm attrlog.WDC_WD5000LPLX_00ZNTT0-WD_SERIAL_NUMBER.ata.csv
sudo rm smartd.WDC_WD5000LPLX_00ZNTT0-WD_SERIAL_NUMBER.ata.state
sudo rm smartd.WDC_WD5000LPLX_00ZNTT0-WD_SERIAL_NUMBER.ata.state~
sudo systemctl start smartmontools
Мой smartd.conf
DEVICESCAN -H -l error -l selftest -f -s (O/../.././14|L/../.././15|C/../.././17) -m admin@example.com -M exec /usr/share/smartmontools/smartd-runner
Мой /etc/smartmontools/run.d/10s -гвоздь
#!/bin/bash -e
# Send mail if /usr/bin/s-nail exists
if ! [ -x /usr/bin/s-nail ]; then
echo "Your system does not have /usr/bin/s-nail. Install the s-nail package"
exit 1
fi
# $1 - body file
# $2 - "-s"
# $3 - subject
# $4 - admin email
/usr/bin/s-nail -q $1 -s "$3" -S smtp=smtp://192.168.1.11 -S from="SERVER_NAME S.M.A.R.Td <servername@example.com>" $4
Возможно, решено добавлением -d removable
в DEVICESCAN, вот так:
DEVICESCAN -d removable -m root -M exec /usr/share/smartmontools/smartd-runner