Скрипт разбивающий винчестер (bash)

Модератор: Модераторы разделов

xfree86
Сообщения: 97

Скрипт разбивающий винчестер

Сообщение xfree86 »

Добрый день...

Необходимо написать скрипт, который проверял бы все жесткие диски (IDE и SATA) на компьютере... И если есть диски, на которых нет разделов (тоесть вставили новый пустой винт), то создавал бы на нем один раздел ext2 (можно ext3 - не важно) размером с весь жесткий диск...

Помогите :rolleyes:
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Скрипт разбивающий винчестер

Сообщение sergio »

xfree86 писал(а):
02.11.2007 15:44
Добрый день...

Необходимо написать скрипт, который проверял бы все жесткие диски (IDE и SATA) на компьютере... И если есть диски, на которых нет разделов (тоесть вставили новый пустой винт), то создавал бы на нем один раздел ext2 (можно ext3 - не важно) размером с весь жесткий диск...

Помогите :rolleyes:

Нифигасе задача. :happy: "Автоматический формат Цэ:", да? ))))

man fdisk, cfdisk, sfdisk; по крайней мере последняя может управляться запуском с аргументами и файлом новой "разметки"...
man mkfs, mkfs.ext3 - для создания файловой системы
Информация о разделах на кадом диске - тот же fdisk -l /dev/sda из-под рута.
Список дисков - $(ls /dev/{h,s}d* | egrep '[hs]d[a-f]$')
Наверное, есть и более правильные пути.

Но вообще по-моему кто-то ищет приключений на свои 90. Странная задача. :)
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
xfree86
Сообщения: 97

Re: Скрипт разбивающий винчестер

Сообщение xfree86 »

sergio писал(а):
02.11.2007 16:21
xfree86 писал(а):
02.11.2007 15:44
Добрый день...

Необходимо написать скрипт, который проверял бы все жесткие диски (IDE и SATA) на компьютере... И если есть диски, на которых нет разделов (тоесть вставили новый пустой винт), то создавал бы на нем один раздел ext2 (можно ext3 - не важно) размером с весь жесткий диск...

Помогите :rolleyes:

Нифигасе задача. :happy: "Автоматический формат Цэ:", да? ))))

man fdisk, cfdisk, sfdisk; по крайней мере последняя может управляться запуском с аргументами и файлом новой "разметки"...
man mkfs, mkfs.ext3 - для создания файловой системы
Информация о разделах на кадом диске - тот же fdisk -l /dev/sda из-под рута.
Список дисков - $(ls /dev/{h,s}d* | egrep '[hs]d[a-f]$')
Наверное, есть и более правильные пути.

Но вообще по-моему кто-то ищет приключений на свои 90. Странная задача. :)


да не скажи... Обычная нетривиальная задача...
Самое главное для меня сейчас... Узнать есть ли на диске разделы... И есть нет, то разбить его...
Как красивее проверить наличие разделов на диске?
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: Скрипт разбивающий винчестер

Сообщение d_n_k »

man fdisk
все сказанное есть имхо...
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Скрипт разбивающий винчестер

Сообщение Portnov »

Вот для примера скрипт, устанавливающий систему на чистую машину из готового образа. Тут логика немного другая, но думаю разберетесь ;)

Код:

#!/bin/bash ################################# # # Set global parameters # ################################# # main hard drive HDD=sda # Image file name IMAGE=root.img # size of root (/) partition ROOTSIZE=10000M # size of swap partition SWAPSIZE=1000M # dialogs sizes WIDTH=74 HEIGHT=19 MENUHGT=14 ################################# # # Here goes installation script itself # ################################# export PATH=/bin:/sbin:/usr/bin:/usr/sbin ROOTDEV=${HDD}1 SWAPDEV=${HDD}2 HOMEDEV=${HDD}3 mount -t proc proc /proc mount -t sysfs sys /sys ADDCMD= if grep -q noapic /proc/cmdline then ADDCMD=$ADDCMD" noapic" fi if grep -q noacpi /proc/cmdline then ADDCMD=$ADDCMD" noacpi" fi /etc/init.d/udev start LOC=$(dialog --stdout --menu "Where is the system image?" $HEIGHT $WIDTH $MENUHGT \ cdrom "On the DVD" \ hard "On the hard drive") sleep 2s if [ "$LOC" = cdrom ] then CDROM=$(dialog --stdout --menu "Select CDROM drive" $HEIGHT $WIDTH $MENUHGT \ auto "Auto detect" \ hda "IDE Primary Master" \ hdb "IDE Primary Slave" \ hdc "IDE Secondary Master" \ hdd "IDE Secondary Slave" \ sda "1st SATA drive" \ sdb "2nd SATA drive" \ sdc "3rd SATA drive" \ sdd "4th SATA drive" \ manual "Enter manually") sleep 2s if [ -z "$CDROM" -o "$CDROM" = "manual" ] then CDROM=$(dialog --stdout --inputbox "Please enter CDROM device manually (without /dev/ prefix)" $MENUHGT $WIDTH hdc) fi if [ "$CDROM" = "auto" ] then CDROM=$(cd /dev; ls cdrom* | head -1) fi sleep 2s mount /dev/$CDROM /source/ ( echo o echo n echo p echo 1 echo echo +$ROOTSIZE echo n echo p echo 2 echo echo +$SWAPSIZE echo n echo p echo 3 echo echo echo a echo 1 echo w ) | /sbin/fdisk /dev/$HDD echo Hard disk partitioned: /sbin/fdisk -l /dev/$HDD else HARD=$(dialog --stdout --menu "What the partition?" $HEIGHT $WIDTH $MENUHGT 1 "First" 3 "Third" 4 "Fourth") mount /dev/$HDD$HARD /source/ fi if [ $HDD$HARD = $ROOTDEV ] then echo Image on the root device, will not format /dev/$ROOTDEV else mkfs.ext3 /dev/$ROOTDEV fi mkswap /dev/$SWAPDEV if [ $HDD$HARD = $HOMEDEV ] then echo Image on the home device, will not format /dev/$HOMEDEV else mkfs.ext3 /dev/$HOMEDEV fi mount /dev/$ROOTDEV /target/ mkdir /target/home mount /dev/$HOMEDEV /target/home cd /target echo Will now install the system. Please wait... mount -o loop /source/$IMAGE /image cp -a /image/* /target/ umount /image echo Done. cd / echo Setting some parameters... sed -i -e "s/CDROM/$CDROM/" /target/etc/fstab echo Setting up GRUB... echo "(hd0) /dev/$HDD" > /boot/grub/device.map cp -Rp /boot /target/ if [ "$ADDCMD" ] then sed -i -e "s/^kernel \(.*\)/kernel \1 $ADDCMD/g" /target/boot/grub/menu.lst fi /usr/sbin/grub-install --root-directory=/target/ --no-floppy /dev/$HDD ( echo mount -t proc proc /proc echo mount -t sysfs sys /sys echo /usr/sbin/dpkg-reconfigure xserver-xorg echo umount /sys echo umount /proc ) | chroot /target/ /bin/bash umount /target/home umount /target umount /source echo Filesystems unmounted. /etc/init.d/udev stop echo Will now reboot. sleep 3s rebootnow NOW


(rebootnow - это такая простенькая самописная программа, ребутающая комп).
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
azrael
Сообщения: 73
ОС: KUbuntu 8.04 Hardy Heron

Re: Скрипт разбивающий винчестер

Сообщение azrael »

offtop: почему-то прочитав название темы, подумал о физическом методе разбивания :D
Спасибо сказали:
xfree86
Сообщения: 97

Re: Скрипт разбивающий винчестер

Сообщение xfree86 »

Подскажите, как с помощью sfdisk создать на диске раздел ext2 во весь жесткий жиск (на диске разделов нет)...
Спасибо сказали:
Аватара пользователя
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current

Re: Скрипт разбивающий винчестер

Сообщение ddc »

С sfdisk не знаю, а с fdisk:

Код: Выделить всё

echo -e n'\n'1'\n'1'\n'$(fdisk -l | grep cylinders | cut -d \  -f 5)'\n'w | fdisk /dev/$DEVICE
Спасибо сказали:
xfree86
Сообщения: 97

Re: Скрипт разбивающий винчестер

Сообщение xfree86 »

ddc писал(а):
08.11.2007 12:21
С sfdisk не знаю, а с fdisk:

Код: Выделить всё

echo -e n'\n'1'\n'1'\n'$(fdisk -l | grep cylinders | cut -d \  -f 5)'\n'w | fdisk /dev/$DEVICE


Тогда наверное вот так

Код: Выделить всё

echo -e n'\n'1'\n'1'\n'$(fdisk -l /dev/$DEVICE | grep cylinders | cut -d \  -f 5)'\n'w | fdisk /dev/$DEVICE
Спасибо сказали:
Аватара пользователя
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current

Re: Скрипт разбивающий винчестер

Сообщение ddc »

xfree86, да, я как-то не подумал об этом...
Спасибо сказали: