Изменения

Перейти к: навигация, поиск

~s - скрипты-утилиты

3674 байта добавлено, 11:14, 27 февраля 2015
Нет описания правки
* Поддерживает обратный порядок копирования => позволяет корректно перемещать данные внутри одного файла (например, разделы на диске!) ВПЕРЁД. Если имя входного файла равно имени выходного, то сама выбирает нужный порядок — вперёд или назад — по разнице смещений.
* Поддерживает отрицательные входные смещение и размер — тогда, как в substr в Perl/PHP, они считаются от конца входного файла.
* Понимает шестнадцатеричные и восьмеричные значения параметров — параметров — удобно, потому что не нужно обрамлять их в $(()) или конвертировать в десятичные значения.
* Печатает прогресс копирования в %.
* --buffer BUFFER_SIZE — copy this count of bytes at once (default 1 MB = 0x100000 bytes).
* --reverse — use reverse copying order. In most cases you don’t need to set this manually because when you’re moving data within one file, the correct copying order is selected automatically based on offsets (reverse order is used when moving data forward, forward order is used when moving data backward).
 
== [{{SVN|vitalif/trunk/scripts/move-mdadm0.9.c|co}} move-mdadm0.9.c] ==
 
Простая утилита для перемещения mdadm’овского суперблока при изменении размера RAID-разделов. Лицензия: GNU GPL 3.0 или более поздняя, в том виде, в котором опубликована Фондом Свободного Программного Обеспечения.
 
Компиляция и использование:
 
gcc -o move-mdadm0.9 move-mdadm0.9.c
./move-mdadm0.9 device old_size_in_bytes new_size_in_bytes
 
Есть несколько версий суперблока mdadm — 0.90, 1.0, 1.1 и 1.2. Версии 1.1 и 1.2 располагаются в начале дискового раздела и поэтому не нуждаются в перемещении при изменении его размера; версии 0.90 и 1.0 суперблока, однако, располагаются в конце раздела и поэтому при изменении размера раздела их нужно перемещать.
 
Стандартный подход для этого — удалять диски из массива по одному, изменять их размер и добавлять обратно, опять-таки по одному. Это долго, так как требует синхронизации данных (resync) после добавления каждого диска. Только после завершения нескольких resync вы сможете запустить <tt><nowiki>mdadm --grow</nowiki></tt>.
 
Чтобы этого не делать и была написана данная утилита. С ней вы можете просто остановить массив (<tt><nowiki>mdadm --stop</nowiki></tt>), изменить размеры всех разделов, запустить {{cmd|./move-mdadm0.9 <раздел> <старый_размер_в_байтах> <новый_размер_в_байтах>}}
на каждом разделе и запустить массив обратно, после чего он будет сразу готов для выполнения команды <tt><nowiki>mdadm --grow</nowiki></tt>.
 
=== English help ===
 
Simple tool that allows to move mdadm v0.90 and v1.0 superblocks after resizing a device. License: GNU GPL 3.0 or later, as published by the Free Software Foundation.
 
Compiling and usage:
 
gcc -o move-mdadm0.9 move-mdadm0.9.c
./move-mdadm0.9 device old_size_in_bytes new_size_in_bytes
 
mdadm superblock is the metadata structure stored on devices/partitions participating in a software raid array. There are several versions of metadata format, namely v0.90, v1.0, v1.1 and v1.2. v1.1 and v1.2 superblocks are stored in the beginning and thus do not need moving when the raid partition is resized. However, v0.90 and v1.0 superblocks are stored in the end of the partition, so they need to be moved during resize, or mdadm won’t be able to find them.
 
The standard approach is to remove, resize and re-add disks from the array one by one, but it requires a resync after re-adding each disk, which takes a long time and is basically redundant. Only after all resyncs, you’ll be able to run <tt><nowiki>mdadm --grow</nowiki></tt>.
 
With this tool, you can just stop the array, resize all partitions, run {{cmd|./move-mdadm0.9 <device> <old_device_size_in_bytes> <new_device_size_in_bytes>}}
on each of them, start the array again and it will be immediately ready for
<tt><nowiki>mdadm --grow</nowiki></tt>.
== [{{SVN|vitalif/trunk/scripts/bindiff.c|markup}} bindiff.c] ==

Навигация