Перенос установленной Slackware на программный raid1-массив 2
2010-02-24 10:33:00
... установленной операционной системой
slackware —
slackware.
+ развернуть текст сохранённая копия
Описание задачи
Условия:
- Имеется диск с установленной операционной системой slackware — /dev/sda.
- Имеется дополнительный, пустой диск /dev/sdb.
На основе /dev/sda и /dev/sdb создать raid-массив первого уровня /dev/md0. Затем перенести на /dev/md0 операционную систему и настроить ее загрузку. Т.к. один из дисков изначально занят данными, создание raid-массива будем проводить в три этапа:
- Создание неполного массива /dev/md0 только на основе /dev/sdb1.
- Перенос операционной системы с /dev/sda1 на неполный массив /dev/md0.
- Добавление диска /dev/sda1 к raid-массиву /dev/md0.
Дополнительные условия:
- На рабочем диске существует два раздела — корневой и подкачка.
- В качестве корневой файловой системы используется reiserfs.
- Предполагается, что используется стандартное ядро для slackware версии 2.6.xx, т.е. минимальная версия — Slackware 12.
Перед началом необходимо убедиться, что в рабочей slackware установлена утилита mdadm для управления программными raid-массивами. При ее отстутствии нужно установить пакет mdadm.
Решение задачи
Шаг 1. Загрузка с внешнего носителя.
Загружаемся с SystemResсueCD или c Slax или чего-нибудь еще, чтобы получить полный доступ ко всем дискам и ни один из них не был бы текущим загрузочным.
Шаг 2. Создание таблицы разделов на новом диске.
Начальное состояние таблицы разделов на дисках:
# fdisk -l /dev/sda /dev/sdb
Device Boot Start End Blocks Id System
/dev/sda1 * 1 973 7815591 83 Linux
/dev/sda2 974 1044 570307+ 82 Linux swap / Solaris
Disk /dev/sdb doesn't contain a valid partition table
Сначала, с помощью команды:
cfdisk /dev/sdb
создаем следующие разделы на новом пустом диске:
- /dev/sdb1 — Раздел под raid-массив. Отводим под него большую часть диска. Установить признак «загрузочный». Задать тип раздела «Linux raid autodetect» (код fd).
- /dev/sdb2 — Раздел под подкачку. Отводим под него половину от необходимого размера подкачки. Задать тип раздела «Linux swap» (код 82).
Обращаю внимание, что нельзя полностью заполнять разделами все доступное пространство диска. Т.к., несмортя на указанный одинаковый размер дисков, фактический их размер у разных производителей может не совпадать.
Пример того, что получилось:
# fdisk -l /dev/sdb
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 1009 8104761 fd Linux raid autodetect
/dev/sdb2 1010 1044 281137+ 82 Linux swap / Solaris
Шаг 3. Создание неполного raid-массива.
Сначала, на всякий случай, очищаем возможные следы предыдущих raid-массивов:
mdadm --zero-superblock /dev/sdb1
Теперь, создаем неполный raid-массив, с одним отсутствующим диском:
# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: array /dev/md0 started.
Просмотреть состояние raid-массива можно с помощью команды:
# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1]
8104640 blocks [2/1] [_U]
unused devices: <none>
Шаг 4. Копирование операционной системы.
Форматируем разделы:
mkfs.reiserfs /dev/md0
mkswap /dev/sdb2
Монтируем raid-массив:
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
Монтируем раздел с рабочей системой:
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
Копируем содержимое рабочей системы на raid-массив:
cp -aT /mnt/sda1 /mnt/md0
Теперь всё полезное содержимое диска /dev/sda скопировано на raid-массив. Отмонтируем раздел с рабочей системой:
umount /mnt/sda1
Шаг 5. Подготовка таблицы разделов на старом диске.
Копируем таблицу разделов с диска /dev/sdb на /dev/sda:
sfdisk -d /dev/sdb | sfdisk /dev/sda
Убеждаемся, что таблицы разделов на дисках /dev/sda и /dev/sdb стали идентичны:
# fdisk -l /dev/sda /dev/sdb
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1009 8104761 fd Linux raid autodetect
/dev/sda2 1010 1044 281137+ 82 Linux swap / Solaris
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 1009 8104761 fd Linux raid autodetect
/dev/sdb2 1010 1044 281137+ 82 Linux swap / Solaris
Форматируем раздел подкачки:
mkswap /dev/sda2
Шаг 6. Добавление диска в неполный raid-массив.
Опять, очищаем возможные следы предыдущих raid-массивов:
mdadm --zero-superblock /dev/sda1
Добавляем раздел /dev/sda1 в неполный raid-массив /dev/md0:
# mdadm /dev/md0 -a /dev/sda1
mdadm: added /dev/sda1
Здесь запустится процесс синхронизации дисков raid-массива. Отслеживать его можно с помощью команды:
cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sda1[2] sdb1[1]
8104640 blocks [2/1] [_U]
[==>..................] recovery = 13.7% (1118016/8104640) finish=2.5min speed=44720K/sec
unused devices: <none>
Шаг 7. Настройка скопированной системы.
Сохраняем конфигурацию raid-массива:
mdadm -D --scan >> /mnt/md0/etc/mdadm.conf
Редактируем в файле /mnt/md0/etc/fstab строчки монтирования корневого раздела и раздела подкачки:
/dev/md0 / reiserfs defaults 1 1
/dev/sda2 swap swap pri=1,defaults 0 0
/dev/sdb2 swap swap pri=1,defaults 0 0
Шаг 8. Настройка загрузки с raid-массива.
Редактируем /mnt/md0/etc/lilo.conf, заменяем строчку:
boot = /dev/sda1
на:
boot = /dev/md0
И добавляем строчку:
raid-extra-boot=mbr
Далее действуем в зависимости от типа стандартного ядра slackware.
Шаг 8.1. Используется huge ядро.
В /mnt/md0/etc/lilo.conf добавляем строки:
image = /boot/vmlinuz-huge-smp-2.6.27.7-smp
root = /dev/md0
label = gener-raid
read-only
Версия ядра может быть другой, в зависимости от используемой версии slackware.
Запускаем установку загрузчика lilo на оба диска в raid-массиве:
chroot /mnt/md0 /sbin/lilo
Шаг 8.2. Используется generic ядро.
Создаем файл /mnt/md0/etc/mkinitrd.conf, содержащий строки:
CLEAR_TREE="1"
OUTPUT_IMAGE="/boot/initrd-generic-2.6.27.7-smp-raid.gz"
KERNEL_VERSION="2.6.27.7-smp"
MODULE_LIST="reiserfs"
ROOTDEV="/dev/md0"
RAID="1"
Генерируем initrd-файл:
chroot /mnt/md0 /sbin/mkinitrd -F
В /mnt/md0/etc/lilo.conf добавляем строки:
image = /boot/vmlinuz-generic-smp-2.6.27.7-smp
initrd = /boot/initrd-generic-2.6.27.7-smp-raid.gz
root = /dev/md0
label = gener-raid
read-only
Запускаем установку загрузчика lilo на оба диска в raid-массиве:
chroot /mnt/md0 /sbin/lilo
Шаг 9. Проверка.
Перезагружаем компьютер и убеждаемся что загрузка операционной системы происходит нормально с любого диска из raid-массива.
Тэги:
raid,
slackware
Перенос установленной Slackware на программный raid1-массив
2010-02-08 05:30:00
... установленной операционной системой
slackware.
... версия —
Slackware 12. Однако ...
+ развернуть текст сохранённая копия
Описание задачи
Условия:
- Имеется два одинаковых по размеру, пустых диска /dev/sda и /dev/sdb соответственно.
- Имеется третий диск, например /dev/sdc, с установленной операционной системой slackware.
На основе /dev/sda и /dev/sdb создать raid-массив первого уровня /dev/md0. Затем перенести на /dev/md0 операционную систему и настроить ее загрузку.
Дополнительные условия:
- На рабочем диске существует два раздела — корневой и подкачка.
- В качестве корневой файловой системы используется reiserfs.
- Предполагается, что используется стандартное ядро для slackware версии 2.6.xx, т.е. минимальная версия — Slackware 12. Однако, если очень хочется, существует возможность установки ядра из стандартных пакетов от новых версий slackware на более старые версии этой операционной системы.
Перед началом необходимо убедиться, что в рабочей slackware установлена утилита mdadm для управления программными raid-массивами. При ее отстутствии нужно установить пакет mdadm, который включется в состав дистрибутива начиная с Slackware 10.
Решение задачи
Шаг 1. Загрузка с внешнего носителя.
Загружаемся с SystemResсueCD или c Slax или чего-нибудь еще, чтобы получить полный доступ ко всем дискам и ни один из них не был бы текущим загрузочным.
Шаг 2. Создание таблицы разделов.
Сначала, с помощью команды:
cfdisk /dev/sda
создаем следующие разделы на первом пустом диске:
- /dev/sda1 — Раздел под raid-массив. Отводим под него большую часть диска. Установить признак «загрузочный». Задать тип раздела «Linux raid autodetect» (код fd).
- /dev/sda2 — Раздел под подкачку. Отводим под него половину от необходимого размера подкачки. Задать тип раздела «Linux swap» (код 82).
Обращаю внимание, что нельзя полностью заполнять разделами все доступное пространство диска. Т.к., несмортя на указанный одинаковый размер дисков, фактический их размер у разных производителей может не совпадать.
Пример того, что получилось:
# fdisk -l /dev/sda
Device Boot Start End Blocks Id System
/dev/sda1 * 1 115498 927737653+ fd Linux raid autodetect
/dev/sda2 115499 116471 7815622+ 82 Linux swap
Затем копируем таблицу разделов с первого диска на второй:
sfdisk -d /dev/sda | sfdisk /dev/sdb
Убеждаемся, что таблицы разделов на дисках /dev/sda и /dev/sdb идентичны:
# fdisk -l /dev/sda /dev/sdb
Device Boot Start End Blocks Id System
/dev/sda1 * 1 115498 927737653+ fd Linux raid autodetect
/dev/sda2 115499 116471 7815622+ 82 Linux swap
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 115498 927737653+ fd Linux raid autodetect
/dev/sdb2 115499 116471 7815622+ 82 Linux swap
Шаг 3. Создание raid-массива.
Сначала, на всякий случай, очищаем из разделов возможные следы предыдущих raid-массивов:
mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sdb1
Теперь, собственно, создаем raid-массив:
mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1
Здесь запустится процесс синхронизации двух дисков, входящих в массив, который можно отслеживать с помощью команды:
cat /proc/mdstat
Этот процесс никак не ограничивает работу с уже созданным массивом. Т.е. блочное устройство /dev/md0 уже доступно и с ним можно работать. Можно даже перезагружать компьютер. Но, конечно, в полноценную работу raid-массив встанет самостоятельно, когда синхронизация будет завершена.
Шаг 4. Копирование операционной системы.
Форматируем разделы:
mkfs.reiserfs /dev/md0
mkswap /dev/sda2
mkswap /dev/sdb2
Монтируем raid-массив:
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
Монтируем раздел с рабочей системой:
mkdir /mnt/sdc1
mount /dev/sdc1 /mnt/sdc1
Копируем содержимое рабочей системы на raid-массив:
cp -aT /mnt/sdc1 /mnt/md0
Шаг 5. Настройка скопированной системы.
Сохраняем конфигурацию raid-массива:
mdadm -D --scan >> /mnt/md0/etc/mdadm.conf
Редактируем в файле /mnt/md0/etc/fstab строчки монтирования корневого раздела и раздела подкачки:
/dev/md0 / reiserfs defaults 1 1
/dev/sda2 swap swap pri=1,defaults 0 0
/dev/sdb2 swap swap pri=1,defaults 0 0
Шаг 6. Настройка загрузки с raid-массива.
Редактируем /mnt/md0/etc/lilo.conf, заменяем строчку:
boot = /dev/XXXN
на:
boot = /dev/md0
И добавляем строчку:
raid-extra-boot=mbr
Далее действуем в зависимости от типа стандартного ядра slackware.
Шаг 6.1. Используется huge ядро.
В /mnt/md0/etc/lilo.conf добавляем строки:
image = /boot/vmlinuz-huge-smp-2.6.27.7-smp
root = /dev/md0
label = gener-raid
read-only
Версия ядра может быть другой, в зависимости от используемой версии slackware.
Запускаем установку загрузчика lilo на оба диска в raid-массиве:
chroot /mnt/md0 /sbin/lilo
Шаг 6.2. Используется generic ядро.
Создаем файл /mnt/md0/etc/mkinitrd.conf, содержащий строки:
CLEAR_TREE="1"
OUTPUT_IMAGE="/boot/initrd-generic-2.6.27.7-smp-raid.gz"
KERNEL_VERSION="2.6.27.7-smp"
MODULE_LIST="reiserfs"
ROOTDEV="/dev/md0"
RAID="1"
Генерируем initrd-файл:
chroot /mnt/md0 /sbin/mkinitrd -F
В /mnt/md0/etc/lilo.conf добавляем строки:
image = /boot/vmlinuz-generic-smp-2.6.27.7-smp
initrd = /boot/initrd-generic-2.6.27.7-smp-raid.gz
root = /dev/md0
label = gener-raid
read-only
Запускаем установку загрузчика lilo на оба диска в raid-массиве:
chroot /mnt/md0 /sbin/lilo
Шаг 7. Проверка.
Выключаем компьютер. Отсоединяем теперь уже не нужный диск /dev/sdc. Включаем компьютер и убеждаемся что загрузка операционной системы происходит нормально с любого диска из raid-массива.
Тэги:
raid,
slackware
Проблема при доустановке X-ов и KDE в Slackware
2008-11-25 04:22:00
Симптомы. Дистрибутив Slackware 12.1. Сначала ...
+ развернуть текст сохранённая копия
Симптомы. Дистрибутив Slackware 12.1. Сначала устанавливается только консольная часть системы. Позже, при доустановке X-ов и KDE, иксы отказываются запускаться с сообщением в /var/log/Xorg.0.log:
Fatal server error:
could not open default font 'fixed'
После долгих исканий помог следующий рецепт:
cd /
/var/log/setup/setup.04.mkfontdir
/var/log/setup/setup.05.fontconfig
Необходимо обратить внимание что первая команда cd важна, скрипты корректно отрабатывают только при запуске из корневой директории.
При установке системы сразу с X-ами такого не наблюдается, т.к. запуск этих скиптов являются частью установки системы. Жаль, но это явная недорабтка в моём любимом дистрибутиве Linux. Зафиксировал описание отдельным постом, т.к. поиски решения в интернет затруднены. Результаты гугления уводят по ложному направлению проблем с неким X Font Server. Справедливости ради при должном упорстве описание решения можно найти.
Тэги:
slackware
Установка PostgreSQL-1С для Slackware 12
2008-05-23 02:14:00
... систем заявлена
Slackware 12. ... неком производном от
Slackware дистрибутиве MOPSLinux. ...
+ развернуть текст сохранённая копия
Замечательная компания «Этерсофт» выпускает некий программный продукт SELTA@Etersoft. Для работы этого продукта требуется патченная версия СУБД PostgreSQL. Для скачивания доступны исходные коды и бинарные сборки для большого количества операционных систем.
Теперь хватит рекламы, приступаю к описанию проблемы. Среди поддерживаемых операционных систем заявлена Slackware 12. Однако, предоставленные пакеты не работают «искаробки» без доработки напильником. Справедливости ради надо заметить, что компания честно предупреждает о создании пакетов в неком производном от Slackware дистрибутиве MOPSLinux. Все это написано главным образом для себя, т.к. установку пришлось делать уже во второй раз, и не факт, что последний.
Шаг 1. Убеждаемся что установлен пакет sysvinit-functions:
root@darkstar:~# ls /var/log/packages/sysvinit-functions*
/var/log/packages/sysvinit-functions-8.53-i486-2
Если нет, то устанавливаем его.
Шаг 2. Устанавливаем выкачанные пакеты PostreSQL 1C:
postgresql8.2.1C-8.2.4
postgresql8.2.1C-server-8.2.4
postgresql8.2.1C-libs-8.2.4
postgresql8.2.1C-contrib-8.2.4
Шаг 3. Почему-то при установке не создается необходимый пользователь и группа. Делаем это вручную:
root@darkstar:~# groupadd postgres
root@darkstar:~# useradd -g postgres postgres
root@darkstar:~# chown -R postgres:postgres /var/lib/pgsql
Шаг 4. Стартовый скрипт /etc/rc.d/init.d/postresql категорически не способен работать в Slackware. Накладываем патч:
84c84
< . /etc/sysconfig/network
---
> #. /etc/sysconfig/network
189c189
< $SU -s /bin/sh -l postgres -c "$PGENGINE/postmaster -p '$PGPORT' -D '$PGDATA' ${PGOPTS} &" >> "$PGLOG" 2>&1 < /dev/null
---
> $SU postgres -c "$PGENGINE/postmaster -p \"$PGPORT\" -D \"$PGDATA\" ${PGOPTS} &" >> "$PGLOG" 2>&1 < /dev/null
207c207
< $SU -s /bin/sh -l postgres -s /bin/sh -c "$PGENGINE/pg_ctl stop -D '$PGDATA' -s -m fast" > /dev/null 2>&1 < /dev/null
---
> $SU postgres -c "$PGENGINE/pg_ctl stop -D \"$PGDATA\" -s -m fast" > /dev/null 2>&1 < /dev/null
243c243
< $SU -l postgres -s /bin/sh -c "LANG=ru_RU.UTF-8 $PGENGINE/initdb --pgdata='$PGDATA' --auth='ident sameuser'" >> "$PGLOG" 2>&1 < /dev/null
---
> LANG=ru_RU.UTF-8 $SU postgres -c "$PGENGINE/initdb --pgdata=\"$PGDATA\" --auth=\"ident sameuser\"" >> "$PGLOG" 2>&1 < /dev/null
263c263
< $SU -l postgres -s /bin/sh -c "$PGENGINE/pg_ctl reload -D '$PGDATA' -s" > /dev/null 2>&1 < /dev/null
---
> $SU postgres -c "$PGENGINE/pg_ctl reload -D \"$PGDATA\" -s" > /dev/null 2>&1 < /dev/null
Шаг 5. Шаманства кончились. Далее инициализируем базу данных:
root@darkstar:~# /etc/rc.d/init.d/postgresql initdb
Initializing database: [ OK ]
Шаг 6. Запуск сервера PostreSQL:
root@darkstar:~# /etc/rc.d/init.d/postgresql start
Starting postgresql service: [ OK ]
Шаг 7. Прописываем запуск PostreSQL при загрузке компьютера:
root@darkstar:~# cd /etc/rc.d/rc3.d
root@darkstar:/etc/rc.d/rc3.d# ln -s ../init.d/postgresql S40postgresql
root@darkstar:/etc/rc.d/rc3.d# ln -s ../init.d/postgresql K60postgresql
Все, установка PostreSQL завершена. В завершение необходимо выполнить действия по его настройке.
Тэги:
slackware
Стандартные ядра в Slackware 12
2008-04-18 08:03:00
... сборке ядра в
slackware пакет. Эта информация ... специфична для
Slackware 12, в ...
+ развернуть текст сохранённая копия
Какие версии ядра есть в Slackware 12 и как ими пользоваться.
Данная статья предворяет будущий рассказ о сборке ядра в slackware пакет. Эта информация специфична для Slackware 12, в предыдущих версиях системы все было не так.
В дистрибутив Slackware 12 включены 4 сборки ядра 2.6.21.5. Вот они:
kernel-huge-smp-2.6.21.5_smp-i686-2.tgz
kernel-huge-2.6.21.5-i486-2.tgz
kernel-generic-smp-2.6.21.5_smp-i686-2.tgz
kernel-generic-2.6.21.5-i486-2.tgz
Как видно из названий пакетов, 4 сборки ядра получены путем комбинации признаков:
huge или generic
smp или no_smp
SMP версия ядра
Разберемся сначала с тем, что попроще. SMP (Symmetric Multiprocessing) — это поддержка многопроцессорных систем и многоядерных процессоров. Если у вас в компьютере есть несколько процессоров или один процессор с двумя (или более) ядрами, например Intel Core2Duo, то чтобы получить максимальную производительность вы должны выбрать smp ядро. Если у вас один одноядерный процессор, например Intel Celeron, то чтобы ядро занимало меньше памяти и не обрабатывало неподдерживаемые конфигурации оборудования следует выбрать не smp ядро. Кроме того, для очень старых процессоров — Pentium Pro и ниже, также необходимо выбирать не smp ядро, т.к. smp версия собрана с использованием архитектуры i686. Убедится что smp ядро работает с вашим процессором можно с помощью команды:
cat /proc/cpuinfo
Вы должны увидеть информацию о нескольких процессорах, а не об одном.
Huge/generic версия ядра
Теперь рассмотрим признаки huge и generic.
Huge (огромное) — ядро, содержащее вкомпиленные модули для большинства дисковых (SCSI, RAID) контроллеров и файловых систем. При использовании этого ядра у вас в принципе не возникает проблем с загрузкой системы, даже с экзотического оборудования или файловых систем, типа xfs или jfs. Однако, это ядро занимает больше оперативной памяти и работает медленнее. После установки системы всегда по-умолчанию запускается huge ядро.
Generic (общее) — ядро, в котором драйвера дисковых контроллеров и файловых систем собраны в виде внешних загружаемых модулей. Для загрузки такого ядра нужен initrd образ, содержащий необходимые драйвера. Эта версия ядра требует дополнительных телодвижений при настройке, но занимает меньше памяти и работает быстрее.
Переключение на другое ядро
Итак, исходя из изложенной информации вы уже должны знать какое из стандартных ядер вам подходит больше всего. Вопрос в том, как переключится на другое ядро. Ответ — настроить загрузчик lilo, естественно. Для huge ядер это делается очень просто, в файле /etc/lilo.conf должны быть такие строки:
#huge-smp:
image = /boot/vmlinuz-huge-smp-2.6.21.5-smp
root = /dev/xxxN
label = lnx-huge-smp
read-only
#huge-nosmp
image = /boot/vmlinuz-huge-2.6.21.5
root = /dev/xxxN
label = lnx-huge
read-only
Напомню пару правил при работе с загрузчиком lilo.
- После изменения файла /etc/lilo.conf всегда запускайте утилиту lilo, чтобы изменения вступили в силу.
- Всегда оставляйте один из пуктов меню с гарантированно рабочей конфигурацией на случай, если что-то пойдет не так.
Для generic ядер надо создавать initrd образ. Для этого используется утилита mkinitrd. Например, мне надо создать initrd образ для ядра generic-smp, корневая файловая система на ext3. Тогда мне необходимо ввести команду:
mkinitrd -с -k 2.6.21.5-smp -m ext3 -o /boot/initrd-generic-smp-2.6.21.5.gz
Ещё пример — initrd образ для ядра generic-nosmp и корневая файловая система reiserfs:
mkinitrd -с -k 2.6.21.5 -m reiserfs -o /boot/initrd-generic-2.6.21.5.gz
Теперь как это прописать в /etc/lilo.conf:
#generic-smp:
image = /boot/vmlinuz-generic-smp-2.6.21.5-smp
initrd = /boot/initrd-generic-smp-2.6.21.5.gz
root = /dev/xxxN
label = lnx-gen-smp
read-only
#generic-nosmp
image = /boot/vmlinuz-generic-2.6.21.5
initrd = /boot/initrd-generic-2.6.21.5.gz
root = /dev/xxxN
label = lnx-gen
read-only
В заключении скажу, что переход на generic ядро всегда оправдан. В моём тестовом случае:
Освободилось 5Мб оперативной памяти. Вычислялось как разница между показаниями
grep MemTotal /proc/meminfo
для huge и generic ядра.
Количество системных процессов ядра, те, чьи имена пишутся в квадратных скобочках, уменьшилось на 11 штук:
ps axo cmd | grep \\[
Тэги:
slackware