Хорошо, мне удалось обойтись простым старым sed
вроде этого.
ls -1 \
storage/{innobase,xtradb}/pars/{pars0grm.cc,pars0grm.y,pars0lex.l,lexyy.cc} \
storage/{innobase,xtradb}/fts/{fts0blex.cc,fts0blex.l,fts0pars.cc,fts0pars.y,fts0tlex.cc,fts0tlex.l} \
storage/innobase/include/fts0[bt]lex.h \
| sed -re 'h; s|/pars/|/|; s|/fts/|/|; s|innobase/include|include|; H; x; s|\n| |' \
| xargs -L1 cp -v \
;
Скрипт sed
не такой уж тривиальный, поэтому позвольте мне объяснить пошагово (для меня в будущем):
h
копирует текущую строку («пространство шаблонов») в регистр («удерживаемое пространство»); s
редактирует пространство шаблонов как обычно, удерживаемое пространство не изменяется; H
добавляет теперь отредактированную строку к регистр удержания - который в конечном итоге содержит две строки, старое имя файла и новое, конечно, со встроенными символами \ n
; x
заменяет пространство удержания с пространством шаблонов, эффективно загружая новую пару из старого регистра; s | \ n | |
объединяет две строки в одну, разделяя их пробелом; p
(от вызова sed
без -n
) распечатывает результат. В целом конвейер работает следующим образом:
ls -1
разворачивает все глобусы в имена файлов реальных существующих файлов и печатает их по одной в каждой строке; sed
превращает это в «$ old_filename $ new_filename»
, снова по одному файлу на строку; xargs -L1
вызывает cp -v $ old_filename $ new_filename
в каждой строке. Вот и все!
В этом ответе дайте понять, что все ваши данные будут уничтожены на обоих членах массива (дисках), поэтому сначала сделайте резервную копию!
Откройте терминал и станьте root
(su
); если у вас включен sudo
, вы также можете сделать, например, sudo -i
; см. man sudo
для всех опций):
sudo -i
Установите необходимое и необязательное программное обеспечение.
Необходимые, это необходимые:
Необязательные программы чтобы полностью соответствовать этому ответу, вы можете обойтись без них:
Рекомендую установить все:
apt-get install mdadm gdisk pv util-linux iotop gparted
Сначала нужно стереть диски, если на них раньше были данные и файловые системы, то есть. Предположим, у нас есть 2 члена: sda
и sdb
.
pv < /dev/zero > /dev/sda
pv < /dev/zero > /dev/sdb
Альтернативно, если вы выполняете каждую команду с sudo
, эта часть будет выглядеть так:
sudo bash -c 'pv < /dev/zero > /dev/sda'
sudo bash -c 'pv < /dev/zero > /dev/sdb'
Чтобы перепроверить, ничего ли не осталось, вы можете заглянуть в GParted на обоих дисках, и если там есть какая-либо файловая система, кроме unknown
, сотрите ее:
wipefs -a /dev/sda
wipefs -a /dev/sdb
Разбиваем диски на разделы в зависимости от того, хотите ли вы MBR или GPT:
fdisk /dev/sdX
или
gdisk /dev/sdX
Предположим, вы будете использовать новый стандарт, GPT то есть.
Инициализируем оба диска таблицей разделов GUID (GPT):
gdisk /dev/sda
gdisk /dev/sdb
В обоих случаях используйте следующее:
o
Enter для новой пустой таблицы разделов GUID (GPT)
y
Enter для подтверждения своего решения
w
Enter для записи изменений
y
Enter для подтверждения своего решения
Не делайте этого с GParted, потому что в процессе будет создана файловая система, чего мы не хотим, используйте gdisk
снова:
gdisk /dev/sda
gdisk /dev/sdb
В обоих случаях используйте следующее:
n
Enter для нового раздела
Enter для первого раздела
Enter для значения по умолчанию первого сектора
Enter для значения по умолчанию последнего сектора
fd00
Enter для типа Linux RAID
w
Enter для записи изменений
y
Enter для подтверждения своего решения
Для тройной проверить, ничего ли не осталось позади, вы можете заглянуть с помощью GParted на оба вновь созданных раздела, и если они содержат любую файловую систему, кроме неизвестной
, стереть ее:
wipefs -a /dev/sda1
wipefs -a /dev/sdb1
Теперь вы можете осмотреть диски:
mdadm --examine /dev/sda /dev/sdb
Теперь в скобках должно быть написано (type ee)
.
Если это так, теперь проверяем разделы:
mdadm --examine /dev/sda1 /dev/sdb1
Должно быть написано Суперблок md не обнаружен
.
Если это так, мы можем создать массив RAID0:
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sda1 /dev/sdb1
Подождем, пока массив будет полностью создан, за этим процессом мы можем наблюдать:
watch -n 1 cat /proc/mdstat
После создания массива, мы должны посмотреть на его детали:
mdadm --detail /dev/md0
Там должно быть написано Активные устройства: 2
, Работающие устройства: 2
и что Состояние: чистое
.
Теперь создаем файловую систему на массиве, если вы используете ext4
, этого лучше избегать, потому что ext4lazyinit
займет заметное количество времени, отсюда и название "lazyinit":
mkfs.ext4 /dev/md0
Вместо этого, вы должны принудительно выполнить полную мгновенную инициализацию с помощью:
mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
Указав эти опции, иноды и журнал будут инициализированы немедленно во время создания.
Если вы решили воспользоваться коротким путем и создали файловую систему ext4
с помощью команды "лучше избегать", обратите внимание, что ext4lazyinit
займет заметное время для инициализации всех inodes, вы можете понаблюдать за ней, пока она не завершится, например, с помощью:
iotop
Любой способ инициализации файловой системы, вы должны смонтировать его после того, как он выполнит свою инициализацию:
Теперь мы создадим каталог для этого массива RAID0:
mkdir -p /mnt/raid0
И просто смонтируем его:
mount /dev/md0 /mnt/raid0
Поскольку мы, по сути, закончили, мы можем снова использовать GParted, чтобы быстро проверить, показывает ли он linux-raid
файловую систему вместе с флагом raid
на обоих дисках.
Если да, то мы правильно создали массив RAID0 с разделами GPT и теперь можем копировать на него файлы.
Теперь нам нужно отредактировать fstab
, используя ваш любимый текстовый редактор:
nano /etc/fstab
И добавить в него запись:
/dev/md0 /mnt/raid0 ext4 defaults 0 0
Вы можете проверить, правильно ли это, после сохранения изменений:
mount -av | grep raid0
Должно быть написано уже смонтировано
.
Если это так, сохраняем конфигурацию массива:
mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf
Проверяем, все ли вы сделали по плану, и если да, то можно перезапускать:
reboot