Как со всеми вещами, имеющими отношение к безопасности, нет никаких гарантий, но также необходимо сбалансировать риск (и стоить) против вероятности. На основе опыта (и я выполнял десятки *, отклоняют boxen со средневековья), у меня действительно никогда не было значительного вызванного питанием повреждения файловой системы.
Некоторые из этих машин даже работали на non-journalled файловых системах (ufs и ext2 обычно). Некоторые из них были встроены, и некоторые были мобильными телефонами как Nokia N900 — таким образом, хороший источник питания не был вообще гарантирован.
It не, что повреждения файловой системы не может произойти, это просто, что вероятность его, случай является достаточно низким, что это не должно волновать Вас. Однако, никакая причина не застраховать Ваши ставки.
В ответе на Ваши литеральные вопросы:
ext4
— когда автор предлагает использовать ext3
, они действительно говорят, ‘не используют нестабильные или non-journalled файловые системы как ext2
’). Попробовать ext4
, это является довольно сформировавшимся, и имеет некоторые достойные опции для невращающих дисков, которые могут расширить продолжительность жизни Вашего устройства флэш-памяти.Если Вы имеете второй канал IDE, засовываете вторую карту CF там и захватываете резервное копирование файловой системы периодически. Существует несколько способов сделать это: rsync
, cp
dump
, dd
, даже использование md(4)
(программное обеспечение RAID) устройство (Вы иногда добавляете второй диск, позвольте ему синхронизировать, затем удалить его — если оба устройства живы все время, они выполняют тот же риск повреждения файловой системы). При использовании LVM можно даже захватить снимки. Поскольку сбор данных встроил устройство, я буду просто использовать, специальное решение, которое монтирует вторую файловую систему, копии по журналу данных, сразу размонтирования это. Если Вы волнуетесь по поводу устройства, имеющего хороший загрузочный образ, прикрепляете вторую копию диспетчера начальной загрузки и всех необходимых загрузочных образов на втором устройстве и настраиваете компьютер для начальной загрузки от любого карты CF.
Я не доверял бы второй копии на том же устройстве, потому что устройства хранения перестали работать чаще, чем стабильные файловые системы. Намного чаще, по моему опыту, до сих пор (на работе, была горькая полушутка о странно высоких возможностях отказов диска дня пятницы. Это было почти еженедельное событие некоторое время). Вращается ли диск или нет, он может перестать работать. Поэтому сохраните свои яйца в двух корзинах, если Вы можете, и Вы защитите свои данные лучше.
Если бы данные особенно уязвимы, я нанес бы регулярные визиты в устройство, подкачал бы резервный CF для нового и перезагрузки, позволив им fsck
все его файловые системы в придачу.
Вот очень простой пример использования util-linux
's unshare
, чтобы поместить процесс в частное пространство имен монтирования и дать ему другое представление о той же файловой системе, которую сейчас имеет его родитель:
{ cd /tmp #usually a safe place for this stuff
echo hey >file #some
echo there >file2 #evidence
sudo unshare -m sh -c ' #unshare requires root by default
mount -B file2 file #bind mount there over hey
cat file #show it
kill -TSTP "$$" #suspend root shell and switch back to parent
umount file #unbind there
cat file' #show it
cat file #root shell just suspended
fg #bring it back
cat file2 #round it off
}
there #root shell
hey #root shell suspended
hey #root shell restored
there #rounded
Вы можете предоставить процессу частное представление его файловой системы с помощью утилиты unshare
в современных системах linux, хотя сам механизм пространства имен монтирования был достаточно зрелым для всей серии ядер 3. x серии ядра. Вы можете войти в уже существующие пространства имен всех видов с помощью утилиты nsenter
из того же пакета, а узнать больше можно с помощью man
.
LD_PRELOAD не так уж и сложен, и вам не нужно быть пользователем root.
Вставьте свою собственную процедуру C, которая вызывается вместо реальный open ()
в библиотеке C. Ваша процедура проверяет, является ли открываемый файл «/tmp/adb.log», и вызывает настоящее открытие с другим именем файла. Вот ваш shim_open.c:
/*
* capture calls to a routine and replace with your code
* gcc -Wall -O2 -fpic -shared -ldl -o shim_open.so shim_open.c
* LD_PRELOAD=/.../shim_open.so cat /tmp/adb.log
*/
#define _FCNTL_H 1 /* hack for open() prototype */
#define _GNU_SOURCE /* needed to get RTLD_NEXT defined in dlfcn.h */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dlfcn.h>
#define OLDNAME "/tmp/adb.log"
#define NEWNAME "/tmp/myadb.log"
int open(const char *pathname, int flags, mode_t mode){
static int (*real_open)(const char *pathname, int flags, mode_t mode) = NULL;
if (!real_open) {
real_open = dlsym(RTLD_NEXT, "open");
char *error = dlerror();
if (error != NULL) {
fprintf(stderr, "%s\n", error);
exit(1);
}
}
if (strcmp(pathname,OLDNAME)==0) pathname = NEWNAME;
fprintf(stderr, "opening: %s\n", pathname);
return real_open(pathname, flags, mode);
}
Скомпилируйте его с помощью gcc -Wall -O2 -fpic -shared -ldl -o shim_open.so shim_open.c
и проверьте его, поместив что-нибудь в / tmp / myadb.log
и работает
LD_PRELOAD = / ... / shim_open.so cat /tmp/adb.log
. Тогда попробуйте LD_PRELOAD на adb.