Mdadm centos: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
| (не показаны 4 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
| + | [[Категория:Raid]] |
||
| + | [[Категория:Linux]] |
||
=mdadm centos= |
=mdadm centos= |
||
| Строка 47: | Строка 49: | ||
Changed system type of partition 3 to fd (Linux raid autodetect) |
Changed system type of partition 3 to fd (Linux raid autodetect) |
||
</PRE> |
</PRE> |
||
| + | |||
| + | <PRE> |
||
| + | blkid |
||
| + | /dev/sda1: UUID="dc25921e-8263-4347-8b4e-f7e1e49d9bf5" TYPE="ext4" |
||
| + | /dev/sda2: UUID="a01dd47f-5c61-4770-a4f0-0f8e19c068b5" TYPE="swap" |
||
| + | /dev/sda3: UUID="102984a0-3cd6-43ab-b4bf-47029828a7cb" TYPE="ext4" |
||
| + | /dev/sdb1: UUID="58fb76b9-0552-8a81-31d6-4d7265470739" TYPE="linux_raid_member" |
||
| + | /dev/sdb3: UUID="cf3c8070-443d-8937-6cc8-3ea9197c784a" UUID_SUB="0425635a-21d3-7eae-3015-066254fca5fb" LABEL="impexmedia.net:1" TYPE="linux_raid_member" |
||
| + | /dev/md127: UUID="ad41081b-3dab-458c-bbe1-b1895365d1a4" TYPE="ext4" |
||
| + | /dev/md126: UUID="35036373-4d27-492c-8753-9c62bbd2f789" TYPE="ext4" |
||
| + | </PRE> |
||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | Отличия |
||
| + | * --metadata=0.90 <font color=red>только</font> для /boot-содержащего раздела |
||
| + | * mkfs.ext4 вместо mkfs.ext3(ОС уже должна быть на ext4) |
||
| + | * имя файлов initrd- теперь initramfs- |
||
| + | * убрать из параметров ядра отключение автодетекта рейдов rd_NO_MD |
||
| + | * при создании рейда добавляем bitmap --bitmap=internal --bitmap-chunk=131072. В 5-м CentOS он тоже работает, но может приводить к паникам(5.7 подвержен) |
||
| + | * leaseweb(GPT)-specific |
||
| + | ** <s>сетапает на ext3, поэтому добавляем --with=ext4 при mkinitrd и правим фстаб ext3->ext4</s> |
||
| + | ** копируем и рандомайзим gpt-разделы |
||
| + | |||
| + | В случае переразбивки словесный алгоритм |
||
| + | * скопировать таблицу разделов sda->sdb : sfdisk (gpt only : sfdisk --force, sgdisk -R , sgdisk -G) |
||
| + | * удалить все разделы на sdb кроме первого /boot-содержащего и создать новые разделы с типом fd(gpt only: с типом fd00, тип /boot-содержащего не меняется и остаётся EF00). Если /boot-содержащий раздел - не первый, то нормальной переразбивки не будет :) |
||
| + | * создать рейды из sdb (/boot-содержащий с --metadata=0.90), создать в них фс, смонтировать в /mnt |
||
| + | * подправить /etc/fstab |
||
| + | * наполнить mdadm.conf |
||
| + | * пересобрать все initramfs c raid1 <s>и ext4</s> |
||
| + | * подправить grub.conf (root=/dev/md<font color=red>X</font>, selinux=0, убрать no_md_) |
||
| + | * скопировать данные в /mnt, по 1 команде для каждого раздела. |
||
| + | * установить grub на sdb |
||
| + | * ребутнуться |
||
| + | * освободить таблицу разделов sda(выключить своп) и скопировать таблицу разделов sdb->sda : sfdisk (gpt only : <s>sfdisk</s> не нужен уже, тк таблицу mbr мы не меняли после копирования sda->sdb, sgdisk -R , sgdisk -G) |
||
| + | * запустить синхронизацию /boot-содержащего рейда, дождаться завершения |
||
| + | * установить grub на sda |
||
| + | * запустить синхронизацию остальных рейдов. Рейды с metadata 1.2 умеют продолжать синхронизацию после ребута. |
||
| + | * ребутнуться, настроить свопы в /etc/fstab |
||
| + | |||
| + | <hr> |
||
| + | |||
| + | Не забыть включить Write cache: |
||
| + | |||
| + | <pre>[root@localhost ~]# hdparm -I /dev/sda|egrep 'Write cache' |
||
| + | * Write cache</pre> |
||
| + | |||
| + | <pre>/sbin/hdparm -W 0 /dev/sda 0 Disable write caching |
||
| + | /sbin/hdparm -W 1 /dev/sda 1 Enable write caching</pre> |
||
| + | |||
| + | |||
| + | Если не нужна переразбивка, можно воспользоваться скриптом hop-a: |
||
| + | |||
| + | <pre>mkdir /root/linux_raid1/ |
||
| + | cd /root/linux_raid1/ |
||
| + | wget http://setup.amhost.net/linux_raid1.py |
||
| + | chmod 777 ./linux_raid1.py |
||
| + | ./linux_raid1.py</pre> |
||
| + | |||
| + | <pre>reboot</pre> |
||
| + | |||
| + | <pre>cd /root/linux_raid1/ |
||
| + | ./linux_raid1.py</pre> |
||
| + | |||
| + | <pre>reboot</pre> |
||
| + | |||
| + | <pre>rm -f /tmp/linux_raid1* |
||
| + | rm -rf /root/linux_raid1/</pre> |
||
| + | |||
| + | Или же: |
||
| + | <pre>[root@centos ~]# sfdisk -d /dev/sda| sfdisk /dev/sdb |
||
| + | [root@centos ~]# fdisk /dev/sdb |
||
| + | |||
| + | Command (m for help): t |
||
| + | Partition number (1-4): 1 |
||
| + | Hex code (type L to list codes): fd |
||
| + | Changed system type of partition 1 to fd (Linux raid autodetect) |
||
| + | |||
| + | Command (m for help): p |
||
| + | |||
| + | Disk /dev/sdb: 1073 MB, 1073741824 bytes |
||
| + | 255 heads, 63 sectors/track, 130 cylinders |
||
| + | Units = cylinders of 16065 * 512 = 8225280 bytes |
||
| + | |||
| + | Device Boot Start End Blocks Id System |
||
| + | /dev/sdb1 * 1 117 939771 fd Linux raid autodetect |
||
| + | /dev/sdb2 118 130 104422+ 82 Linux swap |
||
| + | |||
| + | Command (m for help): w |
||
| + | The partition table has been altered! |
||
| + | |||
| + | Calling ioctl() to re-read partition table. |
||
| + | Syncing disks.</pre> |
||
| + | Если sfdisk и fdisk отругались на GPT - не отчаиваемся |
||
| + | |||
| + | начало GPT-части |
||
| + | yum -y install libicu |
||
| + | И ставим для i386 |
||
| + | #rpm -ih http://download.fedora.redhat.com/pub/epel/testing/6/i386/gdisk-0.7.2-1.el6.i686.rpm |
||
| + | yum install http://download.fedora.redhat.com/pub/epel/6/i386/gdisk-0.8.1-2.el6.i686.rpm |
||
| + | или для x86_64 |
||
| + | #rpm -ih http://download.fedora.redhat.com/pub/epel/testing/6/x86_64/gdisk-0.7.2-1.el6.x86_64.rpm |
||
| + | yum install http://download.fedora.redhat.com/pub/epel/6/x86_64/gdisk-0.8.1-2.el6.x86_64.rpm |
||
| + | Копируем таблицу разделов MBR через sfdisk с --force - только один раздел GPT :) |
||
| + | sfdisk -d /dev/sda| sfdisk /dev/sdb |
||
| + | Копируем таблицу GPT через sgdisk |
||
| + | sgdisk -R /dev/sdb /dev/sda |
||
| + | Меняем UUID'ы на скопированной таблице |
||
| + | sgdisk -G /dev/sdb |
||
| + | Меняем тип разделов (кроме boot) на fd00 через gdisk. В примере меняется тип 2-го раздела. У boot должен быть тип EF00 и та же геометрия что и у boot на sda |
||
| + | <pre> |
||
| + | [root@localhost ~]# gdisk /dev/sdb |
||
| + | GPT fdisk (gdisk) version 0.7.2 |
||
| + | |||
| + | Partition table scan: |
||
| + | MBR: protective |
||
| + | BSD: not present |
||
| + | APM: not present |
||
| + | GPT: present |
||
| + | |||
| + | Found valid GPT with protective MBR; using GPT. |
||
| + | |||
| + | Command (? for help): t |
||
| + | Partition number (1-3): 2 |
||
| + | Current type is 'Linux RAID' |
||
| + | Hex code or GUID (L to show codes, Enter = 8300): FD00 |
||
| + | Changed type of partition to 'Linux RAID' |
||
| + | |||
| + | Command (? for help): w |
||
| + | |||
| + | Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING |
||
| + | PARTITIONS!! |
||
| + | |||
| + | Do you want to proceed? (Y/N): y |
||
| + | OK; writing new GUID partition table (GPT). |
||
| + | The operation has completed successfully. |
||
| + | [root@localhost ~]# |
||
| + | </pre> |
||
| + | конец GPT-части |
||
| + | <pre> |
||
| + | #для /boot-содержащего раздела нужно делать рейд с --metadata=0.90) |
||
| + | #bitmap на centos 5 делает панику. |
||
| + | [root@centos ~]# mdadm --create /dev/md0 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb1 |
||
| + | [root@centos ~]# mkfs.ext4 -m1 -O dir_index /dev/md0 |
||
| + | [root@centos ~]# mount /dev/md0 /mnt |
||
| + | [root@centos ~]# cp /etc/fstab /etc/fstab.old |
||
| + | [root@centos ~]# vi /etc/fstab #меняем устройство на /dev/md0 и тип фс на ext4 |
||
| + | [root@centos ~]# echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9]" > /etc/mdadm.conf |
||
| + | [root@centos ~]# mdadm --detail --scan >> /etc/mdadm.conf |
||
| + | [root@centos ~]# for i in `ls -d /lib/modules/2.*|xargs -n1 basename`;do echo -e "\E[01;32m $i\E[0m"; \ |
||
| + | mkinitrd -f --with=raid1 --with=ext4 /boot/initramfs-$i.img $i;done |
||
| + | [root@centos ~]# cp /boot/grub/grub.conf /boot/grub/grub.conf.old |
||
| + | [root@centos ~]# vi /boot/grub/grub.conf |
||
| + | #меняем root на /dev/md0, удаляем rd_NO_MD, добавляем на всякий случай selinux=0 в параметрах ядра |
||
| + | [root@centos ~]# cp -dpRx / /mnt |
||
| + | #для других разделов cp -dpRx /boot /mnt , cp -dpRx /var /mnt и тп |
||
| + | #альтернатива(UNTESTED!!!) rsync -av --bwlimit=5000 --delete --progress --stats --exclude "/mnt" / /mnt |
||
| + | [root@centos ~]# grub # device (hd0) /dev/sdb ; root (hd0,0) ; setup (hd0) ; quit |
||
| + | [root@centos ~]# reboot |
||
| + | |||
| + | |||
| + | [root@centos ~]# mdadm --add /dev/md0 /dev/sda1 |
||
| + | [root@centos ~]# fdisk /dev/sda |
||
| + | |||
| + | Command (m for help): p |
||
| + | |||
| + | Disk /dev/sda: 1073 MB, 1073741824 bytes |
||
| + | 255 heads, 63 sectors/track, 130 cylinders |
||
| + | Units = cylinders of 16065 * 512 = 8225280 bytes |
||
| + | |||
| + | Device Boot Start End Blocks Id System |
||
| + | /dev/sda1 * 1 117 939771 83 Linux |
||
| + | /dev/sda2 118 130 104422+ 82 Linux swap |
||
| + | |||
| + | Command (m for help): t |
||
| + | Partition number (1-4): 1 |
||
| + | Hex code (type L to list codes): fd |
||
| + | Changed system type of partition 1 to fd (Linux raid autodetect) |
||
| + | |||
| + | Command (m for help): w |
||
| + | The partition table has been altered! |
||
| + | |||
| + | Calling ioctl() to re-read partition table. |
||
| + | |||
| + | WARNING: Re-reading the partition table failed with error 16: Device or resource busy. |
||
| + | The kernel still uses the old table. |
||
| + | The new table will be used at the next reboot. |
||
| + | Syncing disks. |
||
| + | #Если fdisk отругался - берём в руки gdisk и меняем тип раздела на FD00, пример работы - в начале статьи. |
||
| + | [root@centos ~]# grub # device (hd0) /dev/sda ; root (hd0,0) ; setup (hd0)</pre> |
||
| + | в тестовой конфигурации наступил на багу - делал mkinitrd не для того ядра, с которого грузилось :)<br> |
||
| + | ещё одна бага - не забыть сменить тип разделов на первичном винте и <font color=red size=4>после завершения клонирования /boot-содержащего раздела</font> переставить '''grub''' на первичный винт<br> |
||
| + | ещё одна бага - selinux нужно выключать через параметр ядра selinux=0, когда ядро грузится с одного диска, а монтируется на другом. |
||
| + | <br>--[[Участник:Wikiadmin|voron]] 18:07, 28 апреля 2007 (UTC) |
||
| + | для запуска созданного неполного массива используем<pre>mdadm --assemble /dev/md0 /dev/sdb1</pre>если нет устройства md1, то создаём руками<pre>mknod /dev/md1 b 9 1</pre> |
||
| + | Если ошиблись с порядком вставки дисков в рейды, то, чтобы не ждать пока синкнется / и только потом /boot, можно оборвать синк /.<pre>#ошибочное добавление /, удобнее начинать с /boot |
||
| + | [root@50 ~]# mdadm --add /dev/md0 /dev/sda3 |
||
| + | mdadm: added /dev/sda3 |
||
| + | #пытаемся удалить из рейда - не даёт. |
||
| + | [root@50 ~]# mdadm --remove /dev/md0 /dev/sda3 |
||
| + | mdadm: hot remove failed for /dev/sda3: Device or resource busy |
||
| + | #отмечаем как failed |
||
| + | [root@50 ~]# mdadm --fail /dev/md0 /dev/sda3 |
||
| + | mdadm: set /dev/sda3 faulty in /dev/md0 |
||
| + | #даёт удалить |
||
| + | [root@50 ~]# mdadm --remove /dev/md0 /dev/sda3 |
||
| + | mdadm: hot removed /dev/sda3 |
||
| + | #добавляем /boot - синкается моментально. |
||
| + | [root@50 ~]# mdadm --add /dev/md1 /dev/sda1 |
||
| + | mdadm: added /dev/sda1 |
||
| + | #добавляем / |
||
| + | [root@50 ~]# mdadm --add /dev/md0 /dev/sda3 |
||
| + | mdadm: re-added /dev/sda3</pre> |
||
| + | |||
| + | =mdadm= |
||
| + | ==raid tuning== |
||
| + | Информация из raid superblock |
||
| + | mdadm -E /dev/sda1 |
||
| + | Создание write intend bitmap(встроенного в метаданные raid) для быстрой ресинхронизации с размером минимально синхронизируемой области 128M |
||
| + | mdadm --grow /dev/md0 -b internal --bitmap-chunk=131072 |
||
| + | Удаление write intend bitmap |
||
| + | mdadm --grow /dev/md0 -b none |
||
| + | Информация про битмап - запускать на компоненте рейда а не самом рейде |
||
| + | mdadm -X /dev/sda1 |
||
| + | Включение/выключение writemostly - этот компонент рейда не будет использоваться для чтения. Внезапно во writebehind есть [http://comments.gmane.org/gmane.linux.raid/36708 баг] когда остаётся только он один в рейде. |
||
| + | echo writemostly > /sys/block/md5/md/dev-sdc5/state |
||
| + | echo -writemostly > /sys/block/md5/md/dev-sdc5/state |
||
| + | Включение отложенной записи в 1024 (чего? операции?) |
||
| + | *При создании |
||
| + | mdadm --create /dev/md5 --level 1 -n 2 /dev/sdd5 missing -b internal --write-behind=1024 |
||
| + | *На готовом разделе - только при одновременном создании bitmap |
||
| + | mdadm --grow /dev/md1 -b internal --write-behind=1024 |
||
| + | Успешность проверяем в mdadm -X/dev/sdXY|grep Write |
||
| + | ==Скрипт сетапа Software RAID1 c дефолтной разбирвкой== |
||
| + | ===CentOS 7=== |
||
| + | # boot 256M(bootable) |
||
| + | # swap 2G |
||
| + | # root 2G |
||
| + | # (extented) |
||
| + | # tmp 2G |
||
| + | # usr 20G |
||
| + | # var 30G |
||
| + | # home rest space |
||
| + | <pre> |
||
| + | swapoff -a |
||
| + | umount /dev/sdb* |
||
| + | sed -i"" -e "s/SELINUX=enforcing/SELINUX=disabled/" /etc/sysconfig/selinux |
||
| + | yum -y install mdadm |
||
| + | sfdisk /dev/sdb --in-order -L --force -uM << EOF |
||
| + | 1,512,fd,* |
||
| + | ,2048,S |
||
| + | ,2048,fd |
||
| + | ,,E |
||
| + | ,2048,fd |
||
| + | ,30720,fd |
||
| + | ,20480,fd |
||
| + | ,,fd |
||
| + | EOF |
||
| + | sleep 5 |
||
| + | echo "y \n"|mdadm --create /dev/md0 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb3 |
||
| + | echo "y \n"|mdadm --create /dev/md1 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 --metadata=1.0 missing /dev/sdb1 |
||
| + | echo "y \n"|mdadm --create /dev/md2 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb5 |
||
| + | echo "y \n"|mdadm --create /dev/md3 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb6 |
||
| + | echo "y \n"|mdadm --create /dev/md4 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb7 |
||
| + | echo "y \n"|mdadm --create /dev/md5 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb8 |
||
| + | mkswap /dev/sdb2 |
||
| + | for i in `seq 0 5`; do mkfs.xfs /dev/md$i; done |
||
| + | mount /dev/md0 /mnt |
||
| + | mkdir /mnt/{tmp,var,usr,home} |
||
| + | mount /dev/md2 /mnt/tmp |
||
| + | mount /dev/md3 /mnt/var |
||
| + | mount /dev/md4 /mnt/usr |
||
| + | mount /dev/md5 /mnt/home |
||
| + | chmod 1777 /mnt/tmp |
||
| + | cp /etc/fstab /etc/fstab.old |
||
| + | cat > /etc/fstab <<EOF |
||
| + | /dev/md0 / xfs defaults,usrquota,grpquota 1 1 |
||
| + | /dev/md1 /boot xfs defaults 1 2 |
||
| + | /dev/md2 /tmp xfs defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md3 /var xfs defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md4 /usr xfs defaults,nodev,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md5 /home xfs defaults,nodev,nosuid,usrquota,grpquota,noatime 1 2 |
||
| + | devpts /dev/pts devpts gid=5,mode=620 0 0 |
||
| + | tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec,size=256m 0 0 |
||
| + | proc /proc proc defaults 0 0 |
||
| + | sysfs /sys sysfs defaults 0 0 |
||
| + | /dev/sdb2 swap swap defaults 0 0 |
||
| + | EOF |
||
| + | echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9]" > /etc/mdadm.conf |
||
| + | mdadm --detail --scan >> /etc/mdadm.conf |
||
| + | MDUIDS=`grep -o 'UUID=[a-z0-9:]*' /etc/mdadm.conf | sed 's/UUID=/rd.md.uuid=/' | tr '\n' ' '` |
||
| + | sed -i 's/^GRUB_CMDLINE_LINUX=.*$/GRUB_CMDLINE_LINUX="rd.md=1 rd.auto selinux=0 crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us MDUIDS"/g' /etc/default/grub |
||
| + | sed -i "s/MDUIDS/$MDUIDS/" /etc/default/grub |
||
| + | cp -dpRx / /mnt |
||
| + | mount /dev/md1 /mnt/boot |
||
| + | cp -dpRx /boot /mnt |
||
| + | mount --bind /proc /mnt/proc ; mount --bind /sys /mnt/sys ; mount --bind /dev /mnt/dev ; |
||
| + | #chroot /mnt /bin/bash -c "dracut -f -v" |
||
| + | for i in `ls -d /lib/modules/3.*|xargs -n1 basename`;do echo -e "\E[01;32m $i\E[0m"; \ |
||
| + | #chroot /mnt /bin/bash -c "dracut --mdadmconf --fstab --force --add="mdraid" --add-drivers="raid1" /boot/initramfs-$i.img $i"; |
||
| + | chroot /mnt /bin/bash -c "dracut -f -v /boot/initramfs-$i.img $i" |
||
| + | done |
||
| + | chroot /mnt /bin/bash -c "grub2-mkconfig -o /boot/grub2/grub.cfg" |
||
| + | chroot /mnt /bin/bash -c "grub2-install /dev/sda" |
||
| + | chroot /mnt /bin/bash -c "grub2-install /dev/sdb" |
||
| + | rm -rf /boot/* |
||
| + | cp -dpRx /mnt/boot/* /boot/ |
||
| + | umount /mnt/{proc,sys,dev} |
||
| + | umount /mnt/{boot,tmp,var,usr,home} |
||
| + | umount /mnt |
||
| + | # |
||
| + | history -c |
||
| + | # |
||
| + | |||
| + | reboot |
||
| + | |||
| + | sfdisk -d /dev/sdb| sfdisk --force /dev/sda |
||
| + | sleep 5 |
||
| + | mkswap /dev/sda2 |
||
| + | mdadm --add /dev/md0 /dev/sda3 |
||
| + | mdadm --add /dev/md1 /dev/sda1 |
||
| + | mdadm --add /dev/md2 /dev/sda5 |
||
| + | mdadm --add /dev/md3 /dev/sda6 |
||
| + | mdadm --add /dev/md4 /dev/sda7 |
||
| + | mdadm --add /dev/md5 /dev/sda8 |
||
| + | COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` |
||
| + | while [ "$COUNTER" -gt "0" ]; do |
||
| + | sleep 60 |
||
| + | COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` |
||
| + | done |
||
| + | echo -e "\E[01;32mSync done\E[0m" |
||
| + | grub2-install /dev/sda |
||
| + | # |
||
| + | history -c |
||
| + | # |
||
| + | |||
| + | #RAID10 |
||
| + | mdadm -G /dev/md0 -n 4 |
||
| + | mdadm -G /dev/md1 -n 4 |
||
| + | mdadm --add /dev/md0 /dev/sdc3 /dev/sdd3 |
||
| + | mdadm --add /dev/md1 /dev/sdc1 /dev/sdd1 |
||
| + | mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sda5 /dev/sdb5 /dev/sdc5 /dev/sdd5 |
||
| + | </pre> |
||
| + | |||
| + | ===CentOS 6=== |
||
| + | # boot 256M(bootable) |
||
| + | # swap 2G |
||
| + | # root 2G |
||
| + | # (extented) |
||
| + | # tmp 2G |
||
| + | # usr 20G |
||
| + | # var 15G |
||
| + | # home rest space |
||
| + | |||
| + | <pre> |
||
| + | swapoff -a |
||
| + | umount /dev/sdb* |
||
| + | sed -i"" -e "s/SELINUX=enforcing/SELINUX=disabled/" /etc/sysconfig/selinux |
||
| + | yum -y install mdadm |
||
| + | sfdisk /dev/sdb --force -uM << EOF |
||
| + | ,256,fd,* |
||
| + | ,2048,S |
||
| + | ,2048,fd |
||
| + | ,,E |
||
| + | ,2048,fd |
||
| + | ,15360,fd |
||
| + | ,20480,fd |
||
| + | ,,fd |
||
| + | EOF |
||
| + | sleep 5 |
||
| + | echo "y \n"|mdadm --create /dev/md0 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb3 |
||
| + | echo "y \n"|mdadm --create /dev/md1 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 --metadata=0.90 missing /dev/sdb1 |
||
| + | echo "y \n"|mdadm --create /dev/md2 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb5 |
||
| + | echo "y \n"|mdadm --create /dev/md3 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb6 |
||
| + | echo "y \n"|mdadm --create /dev/md4 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb7 |
||
| + | echo "y \n"|mdadm --create /dev/md5 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb8 |
||
| + | mkswap /dev/sdb2 |
||
| + | for i in `seq 0 5`; do mkfs.ext4 -m1 -O dir_index /dev/md$i; done |
||
| + | mount /dev/md0 /mnt |
||
| + | mkdir /mnt/{tmp,var,usr,home} |
||
| + | mount /dev/md2 /mnt/tmp |
||
| + | mount /dev/md3 /mnt/var |
||
| + | mount /dev/md4 /mnt/usr |
||
| + | mount /dev/md5 /mnt/home |
||
| + | chmod 1777 /mnt/tmp |
||
| + | cp /etc/fstab /etc/fstab.old |
||
| + | cat > /etc/fstab <<EOF |
||
| + | /dev/md0 / ext4 defaults,usrquota,grpquota 1 1 |
||
| + | /dev/md1 /boot ext4 defaults 1 2 |
||
| + | /dev/md2 /tmp ext4 defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md3 /var ext4 defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md4 /usr ext4 defaults,nodev,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md5 /home ext4 defaults,nodev,nosuid,usrquota,grpquota,noatime 1 2 |
||
| + | devpts /dev/pts devpts gid=5,mode=620 0 0 |
||
| + | tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec,size=256m 0 0 |
||
| + | proc /proc proc defaults 0 0 |
||
| + | sysfs /sys sysfs defaults 0 0 |
||
| + | /dev/sdb2 swap swap defaults 0 0 |
||
| + | EOF |
||
| + | echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9]" > /etc/mdadm.conf |
||
| + | mdadm --detail --scan >> /etc/mdadm.conf |
||
| + | for i in `ls -d /lib/modules/2.*|xargs -n1 basename`;do echo -e "\E[01;32m $i\E[0m"; \ |
||
| + | mkinitrd -f --with=raid1 --with=ext4 /boot/initramfs-$i.img $i;done |
||
| + | cp /boot/grub/grub.conf /boot/grub/grub.conf.old |
||
| + | sed -i"" -re's#root=([^[:space:]]*)#root=/dev/md0#' /boot/grub/grub.conf |
||
| + | sed -i"" -re's# rd_LVM_LV=([^[:space:]]*)##' /boot/grub/grub.conf |
||
| + | sed -i"" -e "s/ rd_NO_MD//" /boot/grub/grub.conf |
||
| + | cp -dpRx / /mnt |
||
| + | mount /dev/md1 /mnt/boot |
||
| + | cp -dpRx /boot /mnt |
||
| + | echo -e "device (hd0) /dev/sdb \n root (hd0,0) \n setup (hd0)" | grub --batch |
||
| + | # |
||
| + | history -c |
||
| + | # |
||
| + | </pre> |
||
| + | Ребут |
||
| + | <pre> |
||
| + | sfdisk -d /dev/sdb| sfdisk --force /dev/sda |
||
| + | sleep 5 |
||
| + | mkswap /dev/sda2 |
||
| + | mdadm --add /dev/md0 /dev/sda3 |
||
| + | mdadm --add /dev/md1 /dev/sda1 |
||
| + | mdadm --add /dev/md2 /dev/sda5 |
||
| + | mdadm --add /dev/md3 /dev/sda6 |
||
| + | mdadm --add /dev/md4 /dev/sda7 |
||
| + | mdadm --add /dev/md5 /dev/sda8 |
||
| + | COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` |
||
| + | while [ "$COUNTER" -gt "0" ]; do |
||
| + | sleep 60 |
||
| + | COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` |
||
| + | done |
||
| + | echo -e "\E[01;32mSync done\E[0m" |
||
| + | echo -e "device (hd0) /dev/sda \n root (hd0,0) \n setup (hd0)" | grub --batch |
||
| + | # |
||
| + | history -c |
||
| + | # |
||
| + | </pre> |
||
| + | |||
| + | ===CentOS 5=== |
||
| + | <pre> |
||
| + | swapoff -a |
||
| + | umount /dev/sdb* |
||
| + | sfdisk --force /dev/sdb -uM << EOF |
||
| + | ,100,fd,* |
||
| + | ,2048,S |
||
| + | ,2048,fd |
||
| + | ,,E |
||
| + | ,2048,fd |
||
| + | ,15360,fd |
||
| + | ,20480,fd |
||
| + | ,,fd |
||
| + | EOF |
||
| + | sleep 5 |
||
| + | echo "y \n"|mdadm --create /dev/md0 --level 1 --raid-devices=2 missing /dev/sdb3 |
||
| + | echo "y \n"|mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/sdb1 |
||
| + | echo "y \n"|mdadm --create /dev/md2 --level 1 --raid-devices=2 missing /dev/sdb5 |
||
| + | echo "y \n"|mdadm --create /dev/md3 --level 1 --raid-devices=2 missing /dev/sdb6 |
||
| + | echo "y \n"|mdadm --create /dev/md4 --level 1 --raid-devices=2 missing /dev/sdb7 |
||
| + | echo "y \n"|mdadm --create /dev/md5 --level 1 --raid-devices=2 missing /dev/sdb8 |
||
| + | mkswap /dev/sdb2 |
||
| + | for i in `seq 0 5`; do mkfs.ext3 -m1 -O dir_index /dev/md$i; done |
||
| + | mount /dev/md0 /mnt |
||
| + | mkdir /mnt/{tmp,var,usr,home} |
||
| + | mount /dev/md2 /mnt/tmp |
||
| + | mount /dev/md3 /mnt/var |
||
| + | mount /dev/md4 /mnt/usr |
||
| + | mount /dev/md5 /mnt/home |
||
| + | chmod 1777 /mnt/tmp |
||
| + | cp /etc/fstab /etc/fstab.old |
||
| + | cat > /etc/fstab <<EOF |
||
| + | /dev/md0 / ext3 defaults,usrquota,grpquota 1 1 |
||
| + | /dev/md1 /boot ext3 defaults 1 2 |
||
| + | /dev/md2 /tmp ext3 defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md3 /var ext3 defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md4 /usr ext3 defaults,nodev,usrquota,grpquota,noatime 1 2 |
||
| + | /dev/md5 /home ext3 defaults,nodev,nosuid,usrquota,grpquota,noatime 1 2 |
||
| + | devpts /dev/pts devpts gid=5,mode=620 0 0 |
||
| + | tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec,size=256m 0 0 |
||
| + | proc /proc proc defaults 0 0 |
||
| + | sysfs /sys sysfs defaults 0 0 |
||
| + | /dev/sdb2 swap swap defaults 0 0 |
||
| + | EOF |
||
| + | echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9]" > /etc/mdadm.conf |
||
| + | mdadm --detail --scan >> /etc/mdadm.conf |
||
| + | for i in `ls -d /lib/modules/2.*|xargs -n1 basename`;do echo -e "\E[01;32m $i\E[0m"; \ |
||
| + | mkinitrd -f --with=raid1 /boot/initrd-$i.img $i; \ |
||
| + | gunzip -dc /boot/initrd-$i.img|grep -a "raidauto\|/dev/md0";done |
||
| + | cp /boot/grub/grub.conf /boot/grub/grub.conf.old |
||
| + | sed -i"" -e "s#root\=LABEL\=\/#root=/dev/md0#" /boot/grub/grub.conf |
||
| + | cp -dpRx / /mnt |
||
| + | mount /dev/md1 /mnt/boot |
||
| + | cp -dpRx /boot /mnt |
||
| + | echo -e "device (hd0) /dev/sdb \n root (hd0,0) \n setup (hd0)" | grub --batch |
||
| + | # |
||
| + | </pre> |
||
| + | |||
| + | Ребут |
||
| + | |||
| + | <pre> |
||
| + | sfdisk -d /dev/sdb| sfdisk --force /dev/sda |
||
| + | sleep 5 |
||
| + | mkswap /dev/sda2 |
||
| + | mdadm --add /dev/md0 /dev/sda3 |
||
| + | mdadm --add /dev/md1 /dev/sda1 |
||
| + | mdadm --add /dev/md2 /dev/sda5 |
||
| + | mdadm --add /dev/md3 /dev/sda6 |
||
| + | mdadm --add /dev/md4 /dev/sda7 |
||
| + | mdadm --add /dev/md5 /dev/sda8 |
||
| + | COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` |
||
| + | while [ "$COUNTER" -gt "0" ]; do |
||
| + | sleep 60 |
||
| + | COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` |
||
| + | done |
||
| + | echo -e "\E[01;32mSync done\E[0m" |
||
| + | echo -e "device (hd0) /dev/sda \n root (hd0,0) \n setup (hd0)" | grub --batch |
||
| + | # |
||
| + | </pre> |
||
| + | |||
| + | ==RAID10== |
||
| + | <pre> |
||
| + | mdadm -G /dev/md0 -n 4 --force |
||
| + | mdadm -G /dev/md1 -n 4 --force |
||
| + | mdadm --add /dev/md0 /dev/sdc3 /dev/sdd3 |
||
| + | mdadm --add /dev/md1 /dev/sdc1 /dev/sdd1 |
||
| + | mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sda5 /dev/sdb5 /dev/sdc5 /dev/sdd5 |
||
| + | </pre> |
||
| + | |||
| + | ==GPT gdisk== |
||
| + | Подключаем [[epel]] |
||
| + | yum -y install gdisk |
||
| + | Клонируем таблицу разделов: |
||
| + | sgdisk --replicate=/dev/sdb /dev/sda |
||
| + | После чего '''обязательно''' меняем UUID'ы в новой таблице разделов |
||
| + | sgdisk -G /dev/sdb |
||
Текущая версия на 08:39, 30 октября 2023
mdadm centos
Задача - добавили новый винт и надо переехать на рейд
Размечаем так как есть:
sfdisk -d /dev/sda | sfdisk /dev/sdb --force Checking that no-one is using this disk right now ... OK Disk /dev/sdb: 38913 cylinders, 255 heads, 63 sectors/track Old situation: Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0 Device Boot Start End #cyls #blocks Id System /dev/sdb1 0 - 0 0 0 Empty /dev/sdb2 0 - 0 0 0 Empty /dev/sdb3 0 - 0 0 0 Empty /dev/sdb4 0 - 0 0 0 Empty New situation: Units = sectors of 512 bytes, counting from 0 Device Boot Start End #sectors Id System /dev/sdb1 * 2048 411647 409600 83 Linux /dev/sdb2 411648 12699647 12288000 82 Linux swap / Solaris /dev/sdb3 12699648 625141759 612442112 83 Linux /dev/sdb4 0 - 0 0 Empty
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb3 missing
mkfs.ext4 /dev/md0 mkfs.ext4 /dev/md1
Не забыть установить тип партиции fd для всех разделов в рейде
fdisk /dev/sdb t Partition number (1-4): 3 Hex code (type L to list codes): fd Changed system type of partition 3 to fd (Linux raid autodetect)
blkid /dev/sda1: UUID="dc25921e-8263-4347-8b4e-f7e1e49d9bf5" TYPE="ext4" /dev/sda2: UUID="a01dd47f-5c61-4770-a4f0-0f8e19c068b5" TYPE="swap" /dev/sda3: UUID="102984a0-3cd6-43ab-b4bf-47029828a7cb" TYPE="ext4" /dev/sdb1: UUID="58fb76b9-0552-8a81-31d6-4d7265470739" TYPE="linux_raid_member" /dev/sdb3: UUID="cf3c8070-443d-8937-6cc8-3ea9197c784a" UUID_SUB="0425635a-21d3-7eae-3015-066254fca5fb" LABEL="impexmedia.net:1" TYPE="linux_raid_member" /dev/md127: UUID="ad41081b-3dab-458c-bbe1-b1895365d1a4" TYPE="ext4" /dev/md126: UUID="35036373-4d27-492c-8753-9c62bbd2f789" TYPE="ext4"
Отличия
- --metadata=0.90 только для /boot-содержащего раздела
- mkfs.ext4 вместо mkfs.ext3(ОС уже должна быть на ext4)
- имя файлов initrd- теперь initramfs-
- убрать из параметров ядра отключение автодетекта рейдов rd_NO_MD
- при создании рейда добавляем bitmap --bitmap=internal --bitmap-chunk=131072. В 5-м CentOS он тоже работает, но может приводить к паникам(5.7 подвержен)
- leaseweb(GPT)-specific
сетапает на ext3, поэтому добавляем --with=ext4 при mkinitrd и правим фстаб ext3->ext4- копируем и рандомайзим gpt-разделы
В случае переразбивки словесный алгоритм
- скопировать таблицу разделов sda->sdb : sfdisk (gpt only : sfdisk --force, sgdisk -R , sgdisk -G)
- удалить все разделы на sdb кроме первого /boot-содержащего и создать новые разделы с типом fd(gpt only: с типом fd00, тип /boot-содержащего не меняется и остаётся EF00). Если /boot-содержащий раздел - не первый, то нормальной переразбивки не будет :)
- создать рейды из sdb (/boot-содержащий с --metadata=0.90), создать в них фс, смонтировать в /mnt
- подправить /etc/fstab
- наполнить mdadm.conf
- пересобрать все initramfs c raid1
и ext4 - подправить grub.conf (root=/dev/mdX, selinux=0, убрать no_md_)
- скопировать данные в /mnt, по 1 команде для каждого раздела.
- установить grub на sdb
- ребутнуться
- освободить таблицу разделов sda(выключить своп) и скопировать таблицу разделов sdb->sda : sfdisk (gpt only :
sfdiskне нужен уже, тк таблицу mbr мы не меняли после копирования sda->sdb, sgdisk -R , sgdisk -G) - запустить синхронизацию /boot-содержащего рейда, дождаться завершения
- установить grub на sda
- запустить синхронизацию остальных рейдов. Рейды с metadata 1.2 умеют продолжать синхронизацию после ребута.
- ребутнуться, настроить свопы в /etc/fstab
Не забыть включить Write cache:
[root@localhost ~]# hdparm -I /dev/sda|egrep 'Write cache'
* Write cache
/sbin/hdparm -W 0 /dev/sda 0 Disable write caching /sbin/hdparm -W 1 /dev/sda 1 Enable write caching
Если не нужна переразбивка, можно воспользоваться скриптом hop-a:
mkdir /root/linux_raid1/ cd /root/linux_raid1/ wget http://setup.amhost.net/linux_raid1.py chmod 777 ./linux_raid1.py ./linux_raid1.py
reboot
cd /root/linux_raid1/ ./linux_raid1.py
reboot
rm -f /tmp/linux_raid1* rm -rf /root/linux_raid1/
Или же:
[root@centos ~]# sfdisk -d /dev/sda| sfdisk /dev/sdb [root@centos ~]# fdisk /dev/sdb Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): p Disk /dev/sdb: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 117 939771 fd Linux raid autodetect /dev/sdb2 118 130 104422+ 82 Linux swap Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Если sfdisk и fdisk отругались на GPT - не отчаиваемся
начало GPT-части
yum -y install libicu
И ставим для i386
#rpm -ih http://download.fedora.redhat.com/pub/epel/testing/6/i386/gdisk-0.7.2-1.el6.i686.rpm yum install http://download.fedora.redhat.com/pub/epel/6/i386/gdisk-0.8.1-2.el6.i686.rpm
или для x86_64
#rpm -ih http://download.fedora.redhat.com/pub/epel/testing/6/x86_64/gdisk-0.7.2-1.el6.x86_64.rpm yum install http://download.fedora.redhat.com/pub/epel/6/x86_64/gdisk-0.8.1-2.el6.x86_64.rpm
Копируем таблицу разделов MBR через sfdisk с --force - только один раздел GPT :)
sfdisk -d /dev/sda| sfdisk /dev/sdb
Копируем таблицу GPT через sgdisk
sgdisk -R /dev/sdb /dev/sda
Меняем UUID'ы на скопированной таблице
sgdisk -G /dev/sdb
Меняем тип разделов (кроме boot) на fd00 через gdisk. В примере меняется тип 2-го раздела. У boot должен быть тип EF00 и та же геометрия что и у boot на sda
[root@localhost ~]# gdisk /dev/sdb GPT fdisk (gdisk) version 0.7.2 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): t Partition number (1-3): 2 Current type is 'Linux RAID' Hex code or GUID (L to show codes, Enter = 8300): FD00 Changed type of partition to 'Linux RAID' Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT). The operation has completed successfully. [root@localhost ~]#
конец GPT-части
#для /boot-содержащего раздела нужно делать рейд с --metadata=0.90) #bitmap на centos 5 делает панику. [root@centos ~]# mdadm --create /dev/md0 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb1 [root@centos ~]# mkfs.ext4 -m1 -O dir_index /dev/md0 [root@centos ~]# mount /dev/md0 /mnt [root@centos ~]# cp /etc/fstab /etc/fstab.old [root@centos ~]# vi /etc/fstab #меняем устройство на /dev/md0 и тип фс на ext4 [root@centos ~]# echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9]" > /etc/mdadm.conf [root@centos ~]# mdadm --detail --scan >> /etc/mdadm.conf [root@centos ~]# for i in `ls -d /lib/modules/2.*|xargs -n1 basename`;do echo -e "\E[01;32m $i\E[0m"; \ mkinitrd -f --with=raid1 --with=ext4 /boot/initramfs-$i.img $i;done [root@centos ~]# cp /boot/grub/grub.conf /boot/grub/grub.conf.old [root@centos ~]# vi /boot/grub/grub.conf #меняем root на /dev/md0, удаляем rd_NO_MD, добавляем на всякий случай selinux=0 в параметрах ядра [root@centos ~]# cp -dpRx / /mnt #для других разделов cp -dpRx /boot /mnt , cp -dpRx /var /mnt и тп #альтернатива(UNTESTED!!!) rsync -av --bwlimit=5000 --delete --progress --stats --exclude "/mnt" / /mnt [root@centos ~]# grub # device (hd0) /dev/sdb ; root (hd0,0) ; setup (hd0) ; quit [root@centos ~]# reboot [root@centos ~]# mdadm --add /dev/md0 /dev/sda1 [root@centos ~]# fdisk /dev/sda Command (m for help): p Disk /dev/sda: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 117 939771 83 Linux /dev/sda2 118 130 104422+ 82 Linux swap Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. #Если fdisk отругался - берём в руки gdisk и меняем тип раздела на FD00, пример работы - в начале статьи. [root@centos ~]# grub # device (hd0) /dev/sda ; root (hd0,0) ; setup (hd0)
в тестовой конфигурации наступил на багу - делал mkinitrd не для того ядра, с которого грузилось :)
ещё одна бага - не забыть сменить тип разделов на первичном винте и после завершения клонирования /boot-содержащего раздела переставить grub на первичный винт
ещё одна бага - selinux нужно выключать через параметр ядра selinux=0, когда ядро грузится с одного диска, а монтируется на другом.
--voron 18:07, 28 апреля 2007 (UTC)
для запуска созданного неполного массива используем
mdadm --assemble /dev/md0 /dev/sdb1
если нет устройства md1, то создаём руками
mknod /dev/md1 b 9 1
Если ошиблись с порядком вставки дисков в рейды, то, чтобы не ждать пока синкнется / и только потом /boot, можно оборвать синк /.
#ошибочное добавление /, удобнее начинать с /boot [root@50 ~]# mdadm --add /dev/md0 /dev/sda3 mdadm: added /dev/sda3 #пытаемся удалить из рейда - не даёт. [root@50 ~]# mdadm --remove /dev/md0 /dev/sda3 mdadm: hot remove failed for /dev/sda3: Device or resource busy #отмечаем как failed [root@50 ~]# mdadm --fail /dev/md0 /dev/sda3 mdadm: set /dev/sda3 faulty in /dev/md0 #даёт удалить [root@50 ~]# mdadm --remove /dev/md0 /dev/sda3 mdadm: hot removed /dev/sda3 #добавляем /boot - синкается моментально. [root@50 ~]# mdadm --add /dev/md1 /dev/sda1 mdadm: added /dev/sda1 #добавляем / [root@50 ~]# mdadm --add /dev/md0 /dev/sda3 mdadm: re-added /dev/sda3
mdadm
raid tuning
Информация из raid superblock
mdadm -E /dev/sda1
Создание write intend bitmap(встроенного в метаданные raid) для быстрой ресинхронизации с размером минимально синхронизируемой области 128M
mdadm --grow /dev/md0 -b internal --bitmap-chunk=131072
Удаление write intend bitmap
mdadm --grow /dev/md0 -b none
Информация про битмап - запускать на компоненте рейда а не самом рейде
mdadm -X /dev/sda1
Включение/выключение writemostly - этот компонент рейда не будет использоваться для чтения. Внезапно во writebehind есть баг когда остаётся только он один в рейде.
echo writemostly > /sys/block/md5/md/dev-sdc5/state echo -writemostly > /sys/block/md5/md/dev-sdc5/state
Включение отложенной записи в 1024 (чего? операции?)
- При создании
mdadm --create /dev/md5 --level 1 -n 2 /dev/sdd5 missing -b internal --write-behind=1024
- На готовом разделе - только при одновременном создании bitmap
mdadm --grow /dev/md1 -b internal --write-behind=1024
Успешность проверяем в mdadm -X/dev/sdXY|grep Write
Скрипт сетапа Software RAID1 c дефолтной разбирвкой
CentOS 7
- boot 256M(bootable)
- swap 2G
- root 2G
- (extented)
- tmp 2G
- usr 20G
- var 30G
- home rest space
swapoff -a
umount /dev/sdb*
sed -i"" -e "s/SELINUX=enforcing/SELINUX=disabled/" /etc/sysconfig/selinux
yum -y install mdadm
sfdisk /dev/sdb --in-order -L --force -uM << EOF
1,512,fd,*
,2048,S
,2048,fd
,,E
,2048,fd
,30720,fd
,20480,fd
,,fd
EOF
sleep 5
echo "y \n"|mdadm --create /dev/md0 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb3
echo "y \n"|mdadm --create /dev/md1 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 --metadata=1.0 missing /dev/sdb1
echo "y \n"|mdadm --create /dev/md2 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb5
echo "y \n"|mdadm --create /dev/md3 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb6
echo "y \n"|mdadm --create /dev/md4 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb7
echo "y \n"|mdadm --create /dev/md5 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb8
mkswap /dev/sdb2
for i in `seq 0 5`; do mkfs.xfs /dev/md$i; done
mount /dev/md0 /mnt
mkdir /mnt/{tmp,var,usr,home}
mount /dev/md2 /mnt/tmp
mount /dev/md3 /mnt/var
mount /dev/md4 /mnt/usr
mount /dev/md5 /mnt/home
chmod 1777 /mnt/tmp
cp /etc/fstab /etc/fstab.old
cat > /etc/fstab <<EOF
/dev/md0 / xfs defaults,usrquota,grpquota 1 1
/dev/md1 /boot xfs defaults 1 2
/dev/md2 /tmp xfs defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2
/dev/md3 /var xfs defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2
/dev/md4 /usr xfs defaults,nodev,usrquota,grpquota,noatime 1 2
/dev/md5 /home xfs defaults,nodev,nosuid,usrquota,grpquota,noatime 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec,size=256m 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
EOF
echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9]" > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf
MDUIDS=`grep -o 'UUID=[a-z0-9:]*' /etc/mdadm.conf | sed 's/UUID=/rd.md.uuid=/' | tr '\n' ' '`
sed -i 's/^GRUB_CMDLINE_LINUX=.*$/GRUB_CMDLINE_LINUX="rd.md=1 rd.auto selinux=0 crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us MDUIDS"/g' /etc/default/grub
sed -i "s/MDUIDS/$MDUIDS/" /etc/default/grub
cp -dpRx / /mnt
mount /dev/md1 /mnt/boot
cp -dpRx /boot /mnt
mount --bind /proc /mnt/proc ; mount --bind /sys /mnt/sys ; mount --bind /dev /mnt/dev ;
#chroot /mnt /bin/bash -c "dracut -f -v"
for i in `ls -d /lib/modules/3.*|xargs -n1 basename`;do echo -e "\E[01;32m $i\E[0m"; \
#chroot /mnt /bin/bash -c "dracut --mdadmconf --fstab --force --add="mdraid" --add-drivers="raid1" /boot/initramfs-$i.img $i";
chroot /mnt /bin/bash -c "dracut -f -v /boot/initramfs-$i.img $i"
done
chroot /mnt /bin/bash -c "grub2-mkconfig -o /boot/grub2/grub.cfg"
chroot /mnt /bin/bash -c "grub2-install /dev/sda"
chroot /mnt /bin/bash -c "grub2-install /dev/sdb"
rm -rf /boot/*
cp -dpRx /mnt/boot/* /boot/
umount /mnt/{proc,sys,dev}
umount /mnt/{boot,tmp,var,usr,home}
umount /mnt
#
history -c
#
reboot
sfdisk -d /dev/sdb| sfdisk --force /dev/sda
sleep 5
mkswap /dev/sda2
mdadm --add /dev/md0 /dev/sda3
mdadm --add /dev/md1 /dev/sda1
mdadm --add /dev/md2 /dev/sda5
mdadm --add /dev/md3 /dev/sda6
mdadm --add /dev/md4 /dev/sda7
mdadm --add /dev/md5 /dev/sda8
COUNTER=`egrep -c '(U_|_U)' /proc/mdstat`
while [ "$COUNTER" -gt "0" ]; do
sleep 60
COUNTER=`egrep -c '(U_|_U)' /proc/mdstat`
done
echo -e "\E[01;32mSync done\E[0m"
grub2-install /dev/sda
#
history -c
#
#RAID10
mdadm -G /dev/md0 -n 4
mdadm -G /dev/md1 -n 4
mdadm --add /dev/md0 /dev/sdc3 /dev/sdd3
mdadm --add /dev/md1 /dev/sdc1 /dev/sdd1
mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sda5 /dev/sdb5 /dev/sdc5 /dev/sdd5
CentOS 6
- boot 256M(bootable)
- swap 2G
- root 2G
- (extented)
- tmp 2G
- usr 20G
- var 15G
- home rest space
swapoff -a
umount /dev/sdb*
sed -i"" -e "s/SELINUX=enforcing/SELINUX=disabled/" /etc/sysconfig/selinux
yum -y install mdadm
sfdisk /dev/sdb --force -uM << EOF
,256,fd,*
,2048,S
,2048,fd
,,E
,2048,fd
,15360,fd
,20480,fd
,,fd
EOF
sleep 5
echo "y \n"|mdadm --create /dev/md0 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb3
echo "y \n"|mdadm --create /dev/md1 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 --metadata=0.90 missing /dev/sdb1
echo "y \n"|mdadm --create /dev/md2 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb5
echo "y \n"|mdadm --create /dev/md3 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb6
echo "y \n"|mdadm --create /dev/md4 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb7
echo "y \n"|mdadm --create /dev/md5 --level 1 --bitmap=internal --bitmap-chunk=131072 --raid-devices=2 missing /dev/sdb8
mkswap /dev/sdb2
for i in `seq 0 5`; do mkfs.ext4 -m1 -O dir_index /dev/md$i; done
mount /dev/md0 /mnt
mkdir /mnt/{tmp,var,usr,home}
mount /dev/md2 /mnt/tmp
mount /dev/md3 /mnt/var
mount /dev/md4 /mnt/usr
mount /dev/md5 /mnt/home
chmod 1777 /mnt/tmp
cp /etc/fstab /etc/fstab.old
cat > /etc/fstab <<EOF
/dev/md0 / ext4 defaults,usrquota,grpquota 1 1
/dev/md1 /boot ext4 defaults 1 2
/dev/md2 /tmp ext4 defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2
/dev/md3 /var ext4 defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2
/dev/md4 /usr ext4 defaults,nodev,usrquota,grpquota,noatime 1 2
/dev/md5 /home ext4 defaults,nodev,nosuid,usrquota,grpquota,noatime 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec,size=256m 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
EOF
echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9]" > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf
for i in `ls -d /lib/modules/2.*|xargs -n1 basename`;do echo -e "\E[01;32m $i\E[0m"; \
mkinitrd -f --with=raid1 --with=ext4 /boot/initramfs-$i.img $i;done
cp /boot/grub/grub.conf /boot/grub/grub.conf.old
sed -i"" -re's#root=([^[:space:]]*)#root=/dev/md0#' /boot/grub/grub.conf
sed -i"" -re's# rd_LVM_LV=([^[:space:]]*)##' /boot/grub/grub.conf
sed -i"" -e "s/ rd_NO_MD//" /boot/grub/grub.conf
cp -dpRx / /mnt
mount /dev/md1 /mnt/boot
cp -dpRx /boot /mnt
echo -e "device (hd0) /dev/sdb \n root (hd0,0) \n setup (hd0)" | grub --batch
#
history -c
#
Ребут
sfdisk -d /dev/sdb| sfdisk --force /dev/sda sleep 5 mkswap /dev/sda2 mdadm --add /dev/md0 /dev/sda3 mdadm --add /dev/md1 /dev/sda1 mdadm --add /dev/md2 /dev/sda5 mdadm --add /dev/md3 /dev/sda6 mdadm --add /dev/md4 /dev/sda7 mdadm --add /dev/md5 /dev/sda8 COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` while [ "$COUNTER" -gt "0" ]; do sleep 60 COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` done echo -e "\E[01;32mSync done\E[0m" echo -e "device (hd0) /dev/sda \n root (hd0,0) \n setup (hd0)" | grub --batch # history -c #
CentOS 5
swapoff -a
umount /dev/sdb*
sfdisk --force /dev/sdb -uM << EOF
,100,fd,*
,2048,S
,2048,fd
,,E
,2048,fd
,15360,fd
,20480,fd
,,fd
EOF
sleep 5
echo "y \n"|mdadm --create /dev/md0 --level 1 --raid-devices=2 missing /dev/sdb3
echo "y \n"|mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/sdb1
echo "y \n"|mdadm --create /dev/md2 --level 1 --raid-devices=2 missing /dev/sdb5
echo "y \n"|mdadm --create /dev/md3 --level 1 --raid-devices=2 missing /dev/sdb6
echo "y \n"|mdadm --create /dev/md4 --level 1 --raid-devices=2 missing /dev/sdb7
echo "y \n"|mdadm --create /dev/md5 --level 1 --raid-devices=2 missing /dev/sdb8
mkswap /dev/sdb2
for i in `seq 0 5`; do mkfs.ext3 -m1 -O dir_index /dev/md$i; done
mount /dev/md0 /mnt
mkdir /mnt/{tmp,var,usr,home}
mount /dev/md2 /mnt/tmp
mount /dev/md3 /mnt/var
mount /dev/md4 /mnt/usr
mount /dev/md5 /mnt/home
chmod 1777 /mnt/tmp
cp /etc/fstab /etc/fstab.old
cat > /etc/fstab <<EOF
/dev/md0 / ext3 defaults,usrquota,grpquota 1 1
/dev/md1 /boot ext3 defaults 1 2
/dev/md2 /tmp ext3 defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2
/dev/md3 /var ext3 defaults,nodev,nosuid,noexec,usrquota,grpquota,noatime 1 2
/dev/md4 /usr ext3 defaults,nodev,usrquota,grpquota,noatime 1 2
/dev/md5 /home ext3 defaults,nodev,nosuid,usrquota,grpquota,noatime 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec,size=256m 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
EOF
echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9]" > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf
for i in `ls -d /lib/modules/2.*|xargs -n1 basename`;do echo -e "\E[01;32m $i\E[0m"; \
mkinitrd -f --with=raid1 /boot/initrd-$i.img $i; \
gunzip -dc /boot/initrd-$i.img|grep -a "raidauto\|/dev/md0";done
cp /boot/grub/grub.conf /boot/grub/grub.conf.old
sed -i"" -e "s#root\=LABEL\=\/#root=/dev/md0#" /boot/grub/grub.conf
cp -dpRx / /mnt
mount /dev/md1 /mnt/boot
cp -dpRx /boot /mnt
echo -e "device (hd0) /dev/sdb \n root (hd0,0) \n setup (hd0)" | grub --batch
#
Ребут
sfdisk -d /dev/sdb| sfdisk --force /dev/sda sleep 5 mkswap /dev/sda2 mdadm --add /dev/md0 /dev/sda3 mdadm --add /dev/md1 /dev/sda1 mdadm --add /dev/md2 /dev/sda5 mdadm --add /dev/md3 /dev/sda6 mdadm --add /dev/md4 /dev/sda7 mdadm --add /dev/md5 /dev/sda8 COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` while [ "$COUNTER" -gt "0" ]; do sleep 60 COUNTER=`egrep -c '(U_|_U)' /proc/mdstat` done echo -e "\E[01;32mSync done\E[0m" echo -e "device (hd0) /dev/sda \n root (hd0,0) \n setup (hd0)" | grub --batch #
RAID10
mdadm -G /dev/md0 -n 4 --force mdadm -G /dev/md1 -n 4 --force mdadm --add /dev/md0 /dev/sdc3 /dev/sdd3 mdadm --add /dev/md1 /dev/sdc1 /dev/sdd1 mdadm --create /dev/md2 --level=10 --raid-devices=4 /dev/sda5 /dev/sdb5 /dev/sdc5 /dev/sdd5
GPT gdisk
Подключаем epel
yum -y install gdisk
Клонируем таблицу разделов:
sgdisk --replicate=/dev/sdb /dev/sda
После чего обязательно меняем UUID'ы в новой таблице разделов
sgdisk -G /dev/sdb