На самом деле, узнанный подходящий ответ для меня самостоятельно.
kvm -drive file=x,bus=scsi,boot=on
Вариант дисков допускает определение шины. Но по некоторым причинам, по умолчанию, scsi не является загрузочным. Однако KVM поддерживает boot=on
флаг для того, чтобы сделать диск scsi загрузочным.
Однако это решение все еще имело проблему - по некоторым причинам, потребовалось несколько секунд для диска scsi, который будет обнаружен правильно ядром (я предполагаю, что это - некоторое USB-устройство, обосновываются, ожидают или подобный). Из-за этого я должен был вручную повредить свою начальную загрузку initramfs в подходящем месте для ожидания диска появиться и затем продолжить начальную загрузку. Я сделал это путем предоставления break=mount
на командной строке ядра.
Так, с этой конфигурацией KVM, и break=mount
опция, я мог наконец загрузить свой образ диска без модификаций.
Быстрое примечание: bus=scsi в наше время if=scsi.
Linux имеет кольцевой буфер ядра. Можно использовать dmesg
отобразить его.
Или вот модуль ядра Linux, который, кажется, делает то, что Вы хотите.
Что такое emlog?
emlog является модулем ядра Linux, который помогает получить доступ к новому (и только новому) вывод от процесса. Это работает точно так же, как "хвост-f" на файле журнала, за исключением того, что устройство хранения данных, необходимое никогда, не растет. Это может быть полезно во встроенных системах, где нет достаточного пространства памяти или дискового пространства для хранения полных файлов журнала, но новые сообщения отладки иногда необходимы (например, после того, как ошибка наблюдается).
emlog модуль ядра реализует простой драйвер устройства посимвольного ввода-вывода. Драйвер действует как именованный канал, который имеет конечный, кольцевой буфер. Размер буфера легко настраивается. Поскольку больше данных записано в буфер, самые старые данные отбрасываются. Процесс, который читает из emlog устройства, сначала считает существующий буфер, затем видеть новый текст, как это записано, подобно контролю файла журнала с помощью "хвост-f". (Неблокирующиеся чтения также поддерживаются, если процесс должен получить текущее содержание журнала, не блокируясь для ожидания новых данных.)
Самой близкой вещью, о которой я могу думать, является RRDTools, но вероятно это не то, что Вы ищете. Другое решение состояло бы в том, чтобы контролировать, файл журнала (говорите каждую секунду или в Linux с inotify), например, Вы пишете сценарий как:
while :; do
if [[ $(stat -c %s $FILE) -gt 10000 ]]; then
# rotate the log
fi
sleep 1
done
с inotify:
while :; do
if inotifywait [some options] $FILE; then
# check size and rotate the file
fi
done
Можно использовать мультижурнал от Daemontools djb. Вы передаете свой вывод журнала по каналу в него. Да это - вращение журнала, но вращения просто:
ln current $tai64nlocaltimestamp
Который, в примерно любой современной файловой системе Linux супер быстрая операция. Можно указать, сколько файлов журнала Вы хотите, как большой Вы хотите их. сделайте файлы 10 x 1024 МБ, и у Вас будет свой кольцевой буфер на 1 ГБ.
Обратите внимание на то, что из-за автоматического вращения, это - один источник на экземпляр мультижурнала. Но можно работать вокруг этого путем записи простой обертки с netcat или вручную.
Вы могли сделать канал FIFO и затем от того чтения это с помощью сценария, который вставляет в базу данных. Когда счетчик достигнет 1,000, перезапустите идентификационный номер, вставляемый в базу данных. Не работал бы на размер, конечно, но Вы использовали это в качестве примера, таким образом, я предполагаю, что это - теоретический вопрос.
Интересный вопрос; Вы обычно не рассматриваете что как дизайн. У меня действительно есть программа, которая использует слабо подобную технику для записи истории, но она использует двоичный формат. 'Файл журнала' имеет четыре части, все размеченные в машине нейтральном формате:
Когда новая запись выделяется, если существует пространство в бесплатном списке, то это перезаписывает запись там (не обязательно использующий все это - в этом случае, фрагмент остается в бесплатном списке). Когда нет никакого пространства в бесплатном списке, затем новое место выделено в конце. Когда старая запись вращается, ее пространство перемещено в бесплатный список и объединено с любыми смежными свободными записями. Это разработано для обработки SQL-операторов, таким образом, записи могут быть распространены по многим строкам. Этот код работает над конкретным количеством записей. Это не ограничивает размер файла по сути (хотя не было бы трудно заставить его сделать так).
Основной код истории кода находится в двух файлах, history.c и history.h, доступном из источника для программы SQLCMD (моя версия, не Microsoft; мой был существующим десятилетие или больше перед Microsoft), который может быть загружен с Архива программного обеспечения Международной Группы пользователей Informix. Существует также программа дампа файла истории (histdump.c) и тестер истории (histtest.ec - она утверждает, что была ESQL/C, но является самостоятельно действительно C кодом; одна из функций поддержки это называет использование некоторыми библиотечными функциями ESQL/C Informix). Свяжитесь со мной, если Вы хотите экспериментировать, не используя Informix, ESQL/C - видит мой профиль. Существуют некоторые тривиальные изменения для создания, чтобы это скомпилировало histtest вне своей обстановки дизайна, плюс Вы нуждаются в make-файле.
Я соглашаюсь с комментарием pehr к Вашему вопросу. Вращение журнала не это трудно. Можно настроить logrotate или другой сценарий для периодической проверки файла журнала, как раз когда часто как каждую минуту если Вы, так пожелайте. То, когда это обнаруживает Ваш файл, достигает 1 ГБ в размере, это просто выполняет переименовывание, которое не берет рядом ни с каким вводом-выводом. Во время переименовывания процесса продолжает писать файл журнала. Вращающее устройство журнала может затем отправить ПОНУКАНИЕ Вашему демону системного журнала (Ваш демон регистрируется через системный журнал, правильно? В противном случае это должно поддерживать Сигнал HUP, если это правильно написано...) иметь его, вновь открыли исходный путь к файлу. В этой точке это начнет писать в новый файл в первоначальном тракте, и можно удалить повернутую версию.