Записи помеченные ‘Linux’

Добавление раздела внутри виртуальной машины

После расширения диска в виртуальной машине KVM необходимо создать новый раздел.
Например, у нас был диск размером 43 ГБ, добавили 10:

# fdisk -l

Disk /dev/vda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004fd07

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           1        5091    40892224   83  Linux
/dev/vda2            5091        5222     1048576   82  Linux swap / Solaris

Создадим раздел на неиспользуемом пространстве.

# fdisk /dev/vda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (5222-6527, default 5222):
Using default value 5222
Last cylinder, +cylinders or +size{K,M,G} (5222-6527, default 6527):
Using default value 6527

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 or after you run partprobe(8) or kpartx(8)
Syncing disks.

Здесь мы вошли в утилиту fdisk, ввели команду n (создать раздел), затем ввели p (primary-раздел), затем номер раздела 3. Завершили работу записью изменений, нажав w.

Перезагружаемся, чтобы перечитать таблицу разделов.
Теперь у нас есть новый раздел vda3.

Создадим файловую систему

mkfs.ext4 /dev/vda3 -j

Монтируем

mount /dev/vda3 /mnt

Правим файл /etc/fstab

/dev/vda3 /mnt ext4 defaults 1 1

Расход процессами занимаемой памяти с сортировкой

Полезная однострочная команда, показывающая занимаемое процессами место в оперативной памяти. Суммирует все процессы с одинаковым именем, и сортирует по убыванию. Выводит объём в мегабайтах и имя процесса.

ps -eo comm,rss|awk '{arr[$1]+=$2} END {for (i in arr) {print arr[i]/1024, i}}'|grep -v '^0 '|sort -n -r

Удалить файлы, за исключением некоторых

Удаляем все файлы в текущей директории, кроме некоторых, перечисленных в аргументах.
Простейшая конструкция — спасаем от удаления один файл fileX:

find . -type f -not -name "fileX" -print0 | xargs -0 rm

Из расстрельного списка можно исключить сразу несколько файлов:

find . -type f -not -name "file1" -not -name "file2" -print0 | xargs -0 rm

Жёсткие диски WD Green и странный щёлкающий звук

Возникла необходимость приобрести жёсткий диск большой ёмкости для хранения резервных копий. Особо не заморачиваясь с выбором, купил новенький жёсткий диск WD20EARX на 2ТБ. Этот диск относится к серии Green, имеет частоту вращения шпинделя 5400 об/мин, и потребляет немного электроэнергии. То, что нужно для случаев, когда не требуется высокая производительность, а упор делается на низкие уровни энергопотребления, нагрева и шума.
Во время тестирования обратил внимание, что диск периодически издаёт негромкий, но отчётливый «кликающий» звук. Стало интересно, что это, и не является ли это заводским браком. Чуть-чуть погуглив, выяснилось, что браком это не является, и этот звук — звук парковки головок. Причиной оказалась фирменная технология WD Intellipark, которая паркует головки после определённого времени бездействия и отключает часть электронных схем для экономии электроэнергии. По умолчанию время бездействия выставлено в 8 секунд.
В S.M.A.R.T. жёсткого диска есть параметр, который показывает количество парковок головок. Это параметр Load_Cycle_Count, под номером 193. У меня значение этого параметра за несколько часов использования превысило 200:

193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       232

Выяснилось, что технология Intellipark в сочетании с технологией отложенной записи в Linux и вызывает постоянную парковку головок.
Я не тестировал диск под Windows, но однозначно ясно, что если вы используете диск WD Green на компьютере, в домашнем медиа-сервере или NAS, работающих под управлением Linux, то с этим однозначно что-то надо делать, т.к. постоянная парковка головок не только сказывается на производительности жёсткого диска, но и может существенно снизить продолжительность его службы и привести к преждевременной поломке.
К счастью, выход из этой ситуации есть.
На официальном сайте WD есть утилита, которая может изменить время бездействия до парковки головок, или полностью отключить эту функцию. Утилита называется wdidle3, и её можно скачать здесь.
Утилита работает из-под DOS и имеет следующие параметры (взяты из официального описания):

WDIDLE3 [/S[<Timer>]] [/D] [/R] [/?]
where:
/S[<Timer>] Set timer, units in seconds. Default=8.0 (8.0 seconds).
            Resolution is 0.1 seconds from 8.0 to 12.7 seconds.
            Resolution is 30 seconds from 30 seconds to 300 seconds.
            Note, times between 12.8 and 30 seconds will be set to 30 seconds.
/D          Disable timer.
/R          Report current timer.
/?          This help info.

Для того, чтобы её запустить, нужно записать утилиту на загрузочный флоппи-диск, компакт-диск или сетевой диск, загрузить с него DOS и запустить например так:

wdidle3.exe /S 180

Это установит таймер бездействия на 3 минуты.

Это конечно всё хорошо, но мне было очень лениво вспоминать, как загружаться в DOS, я уже и не припомню, когда последний раз делал это. Поэтому нашёл альтернативный метод — аналогичную утилиту с открытым кодом idle3-tools, разработанную для Linux. Даже если вы используете Windows, то возможно вам также будет проще загрузиться в какой-нибудь Linux Live CD, и запустить там утилиту.
Для запуска утилиты потребуется её скомпилировать из исходников, поэтому в системе должен быть установлен компилятор gcc и утилита сборки make.
Итак, качаем:

wget http://downloads.sourceforge.net/project/idle3-tools/idle3-tools-0.9.1.tgz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fidle3-tools%2Ffiles%2F

Распаковываем:

tar xzvf idle3-tools-0.9.1.tgz

Компилируем:

cd idle3-tools-0.9.1.tgz
make
make install
make clean

Запускаем

idle3ctl

Утилита выведет список доступных опций запуска:

idle3ctl v0.9.1 - Read, Set or disable the idle3 timer of Western Digital drives
Copyright (C) 2011  Christophe Bothamy

Usage: idle3ctl [options] device
Options:
-h : displat help
-V : show version and exit immediately
-v : verbose output
--force : force even if no Western Digital HDD are detected
-g : get raw idle3 timer value
-g100 : get idle3 timer value as wdidle3 v1.00 value
-g103 : get idle3 timer value as wdidle3 v1.03 value
-g105 : get idle3 timer value as wdidle3 v1.05 value
-d : disable idle3 timer
-s<value> : set idle3 timer raw value

Выясните имя устройства для вашего диска, например так:

fdisk -l

В моём случае это /dev/sdb.
Если требуется установить таймер, например, на 5 минут, то утилиту запускаем так:

idle3ctl -s 300 /dev/sdb

Я вообще не стал заморачиваться с таймером, и полностью отключил фичу парковки головок:

idle3ctl -d /dev/sdb

Для того, чтобы изменения вступили в силу, жёсткий диск нужно полностью отключить и затем включить.
После всех этих операций щёлкающий звук исчез, а параметр Load_Cycle_Count расти перестал.

Напоследок, мне было бы интересно узнать, как ведёт себя утилита idle3ctl с жёсткими дисками других производителей, ведь у неё зачем-то есть параметр

--force : force even if no Western Digital HDD are detected

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

Решаем проблему с кодировкой страниц сайта

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

wget http://example.com -S -O /dev/null

Вот пример ответа веб-сервера:

  HTTP/1.1 200 OK
  Server: web-server
  Date: Tue, 20 Dec 2011 18:50:15 GMT
  Content-Type: text/html; charset=utf-8
  Connection: close
  Cache-Control: max-age=300
  Expires: Tue, 20 Dec 2011 18:55:17 GMT

Обратите внимание на слово charset. Оно-то и сообщает браузеру, что на данном сервере используется по умолчанию кодировка utf-8.
Если такого слова в ответе нет, заставить веб-сервер сообщать кодировку можно директивой в файле .htaccess, добавив в него строку:

AddDefaultCharset utf-8

В данном случае веб-сервер станет сообщать о кодировке utf-8. Другая весьма распространённая у нас кодировка — cp1251.

Второй способ сообщить браузеру о кодировке страницы — прописать информацию в мета-теге. Откройте исходник вашей страницы и посмотрите информацию между тегов <head>. Если информация о кодировке корректно записана в мета-теге, то вы должны будете увидеть строку вроде такой:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>