Конвертация файловой системы из ext3 в ext4

вторник, 28 апреля 2009 г.
Монтрование ext3 как ext4 без конвертации

Во-первых, начиная с ядра 2.6.28 можно монтировать ext2, ext3 и ext4 файловые системы как ext4. Это даст возможность использовать новые оптимизированные штуковины нового драйвера (например, delayed allocation, multi-block allocation и большие inode, если вы свою ext3 форматировали с этой опцией), и при этом физически на диске ничего не изменится, давая возможность вернутся обратно на драйвер ext3, например. Это делается очень просто — в вашем /etc/fstab меняете ext3 на ext4 и всё. Правда.

Конвертация в ext4

Совсем другое дело, если вы хотите использовать новые возможности ext4, такие как extents, которые меняют физический формат хранения данных, но и дают большой выигрыш в производительности.
Чтобы включить новые возможности на вашей ext3 файловой системе, нужно сделать так:

#tune2fs -O extents,uninit_bg,dir_index /dev/{нужный раздел}

Внимание! После этой команды, вы уже никогда не сможете смонтировать файловую систему как ext3.
После этого нужно обязательно проверить файловую систему с помощью fsck, чтобы привести в порядок то, что tune2fs не доделала. Делаем это так:

#e2fsck -pDf /dev/{нужный раздел}

После этого правим /etc/fstab и перезагружаемся.

Примечание: есть некоторые новые возможности, которые можно получить, только заново отформатировав раздел, например, flex_bg и поддержка разделов размером больше 16 терабайт.

Еще одно примечание: не рекомендуется менять размер inode с помощью e2fsprogs версии 1.41.0 или старше, потому что это приводит к испорченным данным и грустным людям.

Последнее примечание: после включения экстентов, новые файлы будут создаваться с их использованием, но со старыми ничего не случится и они продолжат лежать на диске в старом формате. Я где-то читал о волшебной утилитке defrag2fs, которая все старые файлы тоже переводит в новый формат, но, как я понял, она еще очень сырая, плохо работает, опасна для жизни и лучше подождать.

Как загружаться, если /boot тоже ext4

Вообще, конвертировать /boot в ext4 бессмысленно. Но если очень хочется, тогда нужно сначала сделать всё, как написано выше. Затем, нужно немного подправить /boot/grub/menu.lst. Находим вот такую строчку:

title Ubuntu 9.04 <...>
root (hdX,Y)
kernel /boot/vmlinuz-2.6.28-... root=... ro quiet splash


И добавляем к последней в конец rootfstype=ext4

Объединение сетевых интерфейсов

Список режимов:
mode=0 (balance-rr)
Последовательно кидает пакеты, с первого по последний интерфейс. 
mode=1 (active-backup)
Один из интерфейсов активен. Если активный интерфейс выходит из строя (link down и т.д.), другой интерфейс заменяет активный. Не требует дополнительной настройки коммутатора
mode=2 (balance-xor)
Передачи распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.
mode=3 (broadcast)
Все пакеты на все интерфейсы
mode=4 (802.3ad)
Link Agregation — IEEE 802.3ad, требует от коммутатора настройки. 
mode=5 (balance-tlb)
Входящие пакеты принимаются только активным сетевым интерфейсом, исходящий распределяется в зависимости от текущей загрузки каждого интерфейса. Не требует настройки коммутатора.
mode=6 (balance-alb)
Тоже самое что 5, только входящий трафик тоже распределяется между интерфейсами. Не требует настройки коммутатора, но интерфейсы должны уметь изменять MAC.
Настройка
Очень простая. Вы выбираете режим, втыкаете в коммутатор второй кабель.
Дальше в зависимости от системы, я делал это на Debian Lenny
#apt-get install ifenslave-2.6
Дальше есть 2 варианта:
Вариант №1 Подправить /etc/network/interfaces к примеру так.
iface bond0 inet static
address 10.0.1.5
netmask 255.255.255.0
network 10.0.1.0
gateway 10.0.1.254
up /sbin/ifenslave bond0 eth0 eth1
down /sbin/ifenslave -d bond0 eth0 eth1

и подправить /etc/modprobe.d/arch/i386 примерно так
alias bond0 bonding
options bonding mode=5 miimon=100 downdelay=200 updelay=200
Естественно указать свой режим и настройки сети.
# update-modules
# ifdown eth0 eth1
# ifup bond0
# /etc/init.d/networking restart

Вариант №2 Все настройки через /etc/network/interfaces
iface bond0 inet static
address 10.0.1.5
netmask 255.255.255.0
network 10.0.1.0
gateway 10.0.1.254
bond_mode balance-tlb
bond_miimon 100
bond_downdelay 200
bond_updelay 200
slaves eth0 eth1

Сохраняем и пишем:
update-modules
# ifdown eth0 eth1
# ifup bond0
# /etc/init.d/networking restart

Простой honeypot

среда, 22 апреля 2009 г.

Создаем скрипт /usr/local/sbin/honey
#!/bin/sh
echo "Date: $(date) \n\nSomeone connect on 31337 port" | mail -s "Security alert $(hostname)" root


Потом открыть файл сервисов /etc/services и записать:
honey 31337/tcp

Теперь открывем /etc/inetd.conf и пишем
honey stream tcp nowait root /usr/local/sbin/honey honey

Все! Командой chmod a+x /usr/local/sbin/honey делаем файл исполняемым и перезагружаем inetd демон /etc/init.d/openbsd-inetd restart. Осталось только проверить его работу, поэтому телнется к себе на 31337 порт командой
telnet 127.0.0.1 31337

Заголовки Apache

Отправляемый сервером (Apache) заголовок позволяет получить ценную информацию.

  $ curl --head http://www.example.com | grep Server
  Server:
Apache/2.2.29  (Debian) mod_ssl/2.8.5 OpenSSL/0.9.6b mod_perl/1.26

  Проще всего изменить значение переменной ServerTokens конфигурационного файла apache. Она может принимать следующие значения.

  Full  -   Отображать полную информацию о названии сервера и установленных модулях.
  Min  -   Предоставить сведения только о названии сервера и установленных модулях.
  Prod -   Выводит только имя сервера.

  После добавления указанной строчки в файл (/etc/apache2/apache.conf или /etc/apache2/conf.d/security).

  ServerTokens Prod

  После этого сервер на запрос выдаст

  $ curl --head http://www.example.org | grep Server

  Server: Apache

Начиная с Apache 2.0.44, эта директива также контролирует информацию предоставляемую директивой ServerSignature, описанной ниже.
ServerSignature
Эта директива отвечает за вывод подвала страницы в документах, сгенерированных сервером (сообщения о ошибках и прочее).
Данная директива может быть выставлена не только глобально, но и для виртуальных хостов, и в .htaccess.

Возможные значения:
Off (default): подавлять вывод
On: включать строку с указанием версии сервера.
EMail: включено все, и дополнительно доступно поле “mailto:” ссылающееся на ServerAdmin

Сообщения syslog

 Категории Описание
  - auth Сообщения о нарушении безопасности и авторизации доступа
  - authpriv Сообщение об использовании привилегированного доступа
  - cron Сообщения демонов cron и at
  - daemon Сообщения, генерируемые другими выполняющимися демонами (sshd, inetd, pppd и т.д.)
  - kern Сообщения ядра
  - lpr Сообщения подсистемы печати
  - mail Сообщения почтовых программ
  - news Сообщения системы новостей
  - syslog Сообщения, создаваемые syslog
  - user Сообщения, генерируемые пользовательскими программами 
  - uucp Сообщения UUCP
  - local0-local7 Определяются для конкретной системы

  Приоритеты Описание сообщения
  - emerg Система непригодна для дальнейшей работы
  - alert Состояние системы требует немедленного вмешательства
  - crit Состояние представляет непосредственную угрозу системе
  - err Сообщения об ошибках
  - warning Предупреждающие сообщения
  - notice Допустимое, но требующее внимания администратора состояние системы
  - info Информационное состояние системы
  - debug Отладочные сообщения

Полезные атрибуты файла

- A отключает создание метки atime для записи времени последнего
доступа к файлу, что позволяет сократить количество операций обращения
к носителю. Не поддерживается многими версиями ядра (до версии 2.0). В
некоторых случаях лучше смонтировать файловую систему с параметром
noatime.

- a Только дозапись данных. Устанавливается суперпользователем.

- d Такой файл будет пропущен при создании backup'а системы.

- i Файл нельзя переименовывать, создавать на него ссылки,
модифицировать.

- s При удалении файла занимаемое им место заполняется нулями.

- S При модификации файла все изменения синхронно фиксируются на НМЖД.

#Чтение атрибутов:
$ lsattr my_file.txt
-------- my_file.txt

#Установка атрибутов:
$ chattr +c my_file.txt
$ chattr +s my_file.txt
$ chattr +d my_file.txt


#Чтение атрибутов:
$ lsattr my_file.txt
s-c---d- my_file.txt


#Снятие атрибутов:
$ chattr -d my_file.txt
s-c----- my_file.txt

Постоянная ссылка /dev/changer

Просмотр информации о устройстве
# udevinfo -a -p /sys/class/scsi_generic/sg0

В файл /etc/udev/rules.d/10.local-scsi.rules сохраняем информацию

SUBSYSTEM=="scsi_generic", ATTRS{model}=="MagFile ", ATTRS{vendor}=="M4 DATA ", SYMLINK+="changer"

Улетный SCSI

понедельник, 13 апреля 2009 г.
не занятое SCSI устройство может быть удалено и установлено "на лету"

Для удаления SCSI устройства:
echo "scsi remove-single-device a b c d" > /proc/scsi/scsi

для добавления SCSI устройства, делаем
echo "scsi add-single-device a b c d" > /proc/scsi/scsi

где
a == hostadapter id (first one being 0)
b == SCSI channel on hostadapter (first one being 0)
c == ID
d == LUN (first one being 0)

Ограничение сетевого трафика для приложений

четверг, 9 апреля 2009 г.
$ sudo apt-get install trickle

Эта замечательная легковесная утилита позволяет ограничить пропускную способность для отдельного приложения, работающего с сокетами. Она не дает точных результатов, и скорость передачи данных может немного отклоняться от требуемой. Но ведь эта утилита и не предназначена для того, чтобы деньги считать. Так что, по моему мнению, программа справляется с поставленной задачей просто отлично.

Загрузим страничку mail.ru. Но поскольку она очень большая и тяжелая, ограничим скорость закачки до 2 КБ/сек, чтобы не перегружать наш драгоценный канал.

$ trickle -d 2 wget mail.ru
trickle: Could not reach trickled, working independently: No such file or directory
--14:40:28-- http://mail.ru/
=> `index.html.5'
Распознаётся mail.ru... 194.67.57.226, 194.67.57.26, 194.67.57.126
Устанавливается соединение с mail.ru|194.67.57.226|:80... соединение установлено.
Запрос HTTP послан, ожидается ответ... 200 OK
Длина: нет информации [text/html]
[ <=> ] 24 576 2.00K/s

И, как говорится, вперед!!!

Трикл имеет два наиболее интересных параметра:
-d - скорость закачки в килобайтах в секунду
и
-u - скорость откачки в тех же единицах измерения.
Список остальных параметров доступен в мане.

Обратите внимания на первую строку вывода команды: "trickle: Could not reach trickled, working independently: No such file or directory". Похоже на сообщение об ошибке, но это просто сообщение о том, каким образом будет работать трикл :-) Дело в том, что он может работать в двух режимах: независимо и через демон. Демон удобен в том случае, если вам нужно ограничить суммарный трафик для нескольких приложениях. Запускаем демона с указанием параметров ограничения

$ trickled -d 5

И теперь каждый экземпляр trickle будет подключаться к демону, при этом указывать пропускную способность больше не нужно. Как остановить демон в мануале не написано. Поэтому я это делаю посредством killall trickled.

По умолчанию утилита trickle общается с демоном trickled через сокет "/tmp/.trickled.sock". Если вам нужно запустить второго демона и направить на него другие экземпляры trickle, используйте параметр -n с указанием другого имени файла сокета.

$ trickled -d 1 -n /tmp/.trickled_1.sock
$ trickle -n /tmp/.trickled_1.sock wget rambler.ru

Хочу еще напоследок обратить ваше внимание на работу с прокси-серверами. Если вы собираетесь закачивать большой файл через прокси, то trickle будет ограничивать скорость только между вами и прокси-сервером. Сам же прокси может закачать весь файл с максимально возможной скоростью и терпеливо ждать, когда вы его заберете себе. Таким образом, при закачке одного большого файла прокси может усугубить всю малину и лишить использование шейпера всякого смысла. Однако, при закачке множества мелких файлов вы по крайней мере ограничите частоту их запросов.

Отправка e-mail писем с вложениями из консоли

Чтобы отослать электронное письмо из командной строки, можно воспользоваться утилитой mail. Также она может встречаться под названием mailx или Mail. Для отправки письма пишем следующую команду:

$ mail -s "Тема письма" pupkin@mail.ru
Привет!
Я пишу тебе из консоли!
Ctrl+D


Комбинация клавиш Ctrl+D (^D) с новой строки позволяет завершить ввод письма. После этого у меня появляется приглашение ввести получателя копии - просто жму "Enter", и письмо отправляется.

Если тело письма находится в файле, то можно просто воспользоваться перенаправлением входного потока:

$ mail -s "Письмо из файла" pupkin@mail.ru

Аналогично поступаем, если требуется отослать вывод какой-либо команды. Например, следующая команда отошлет мне на мыло содержание текущего каталога:

$ ls | mail -s "Вывод команды" pupkin@mail.ru

Кроме того, утилита позволяет не только читать письма, но и получать их, отвечать и делать прочие полезные манипуляции. Но вот чего она, похоже, не позволяет - так это добавить вложение к письму. Однако, это не беда. Есть немало способов отправить файл из консоли по электронной почте. Я рассмотрю три из них, которые не потребовали от меня разбираться в чем-то или что-то скачивать/устанавливать.

1. Если нужно отправить двоичный файл письмом, можно его просто закодировать с помощью uuencode. Команда будет выглядет следующим образом:

$ uuencode image.jpg image.jpg | mail -s "Метод 1" sombeody@somewhere.net

И хотя файл действительно закодируется и отправится, это не является вложением в полном смысле электронной почты. некоторые почтовые клиенты адэкватно отреагируют на файл в письме, другие же покажут его как простой текст, и раскодировать его придется вручную.

2. С помощью консольной утилиты mpack. Эта утилита пакует файл в сообщение и отсылает полученное сообщение туда, куда изволите.

$ mpack -s "Метод 2" image.jpg sombeody@somewhere.net

3. С помощью полноценного консольного почтового клиента mutt. Можно запустить его, сформировать письмо и отправить куда надо. А можно запустить mutt в режиме эмуляции диалога mailx (параметр -x), при этом передав через параметры все необходимое, чтобы не получать лишних вопросов от этой программы. Второй вариант выглядит так:

$ echo "Смотри вложение" | mutt -x -s "Метод 3" -a image.jpg sombeody@somewhere.net

Значки рабочего стола в XFCE

понедельник, 6 апреля 2009 г.
1. Остановить рабочий стол (xfdesktop)
2. Перейти в папку ~/.config/xfce4/desktop/ и там в файле icons.screen0.rc затереть строки по типу
[Файловая система]
row=0
col=1

[Домашняя папка]
row=1
col=1

[Корзина]
row=2
col=1


3. Создать в этой же папке файл xfdesktoprc со следующим содержанием:

[file-icons]
show-filesystem=false
show-home=false
show-trash=false
show-removable=true


Как раз эти строки и отвечают за то, какие значки будут отображаться на рабочем столе, а какие - нет
4. снова запустить xfdesktop

Управление raid

Создание устройства:
# mdadm –create /dev/mdX –level=raid1 –raid-devices=2 /dev/hdAA /dev/hdBB
level - уровень RAID,
raid-devices - количество устройств, затем их перечисление.
Сохранение конфигурации о нём:
# mdadm -E -s -c partitions >> /etc/mdadm.conf

Статус устройства можно посмотреть через
# mdadm -Q --detail /dev/mdX
Удаление/добавление отдельного диска:
Пометить диск как сбойный:
# mdadm /dev/mdX --fail /dev/XXX
Удалить диск из массива:
# mdadm /dev/mdX --remove /dev/XXX
Добавить диск в массив:
# mdadm /dev/mdX --add /dev/XXX