29 Октябрь 2007

Разметка жесткого диска.

Давненько я подобным не занимался, но думаю, что это может быть интересно. Тема эта не нова, однако - актуальна. Ведь делается это, как правило "один раз"! И если все было сделано правильно, то разметка жесткого диска будет актуальной надолго! И даже вдруг нагрянувшее желание сменить дистрибутив, не принесет никаких проблем. Итак, необходимо грамотно "нарезать" партиции на наш жесткий диск и определиться с файловыми системами.

Предполагается, что у нас на жестком диске не имеется никаких там "Виндофсоф". Иначе стратегия разметки немного меняется, хотя принципы остаются теми же. Я рассчитываю это для рабочей тачки, а не для сервера, где желательно сделать несколько по-другому. Для удобства условимся, что имеем винт с размером не менее 80 Гб, а ОЗУ - 500 Мб. В противном случае, значения размеров партиций я бы предложил другие. Слова партиция и раздел - это синонимы.

Вариант 1 - простой.
Все ясно из названия. Подобный вариант предлагают, наверное все современные дистрибутивы при установке для "совсем новичков". И это справедливо. Ведь есть всего 2 раздела: swap - это раздел подкачки, и / - это корневой раздел где располагается все остальное, включая домашний каталог и прочее. Подобную разметку я использую в виртуальных машинах - быстро и удобно. Разделы на диске - Primary.


Вариант 2 - оптимальный.
Очень выгодный вариант разметки. Все четко и оптимально. Все разделы Primary. На мой взгляд, это лучшее решение, если нам не сильно принципиален высокий уровень безопасности системы.

Полагаю, что это наиболее популярный вариант разметки диска.

Вариант 3 - безопасный.
Если имеется постоянный выход в интернет (например по выделенной линии), тогда бы я сделал разделов больше. И связанно это, прежде всего, с точки зрения безопасности. Как ни крути, а машины под Линуксом так же подвержены атакам и взлому "из вне", разве что вирусов я пока не встречал. Поэтому, предлагается такая схема:

Для разделов я указал еще параметры монтирования. Их можно задать во время установки Дебиана, но предпочтительно прописать или изменить в файле /etc/fstab. На мой взгляд, это гораздо удобнее. Ниже привожу скриншот с разметкой "боевой" системы (т.е. реального компьютера), построенного по аналогичной схеме. Сама разметка выполнена средствами инсталлятора Дебиан:

/boot
В этом разделе размещаются статические файлы: образы ядра, конфиги, рамдиски и загрузчик. Основной смысл отдельного монтирования - сделать его "только для чтения". Это исключает всякую возможность каким-либо вирусам либо троянским программам, прописаться в загрузчике для автоактивации при загрузке системы. Я считаю этот шаг достаточно эффективной мерой по защите своей системы.
Значение параметра:

  • ro — доступ только для чтения
Однако нужно помнить, что этот раздел находиться в режиме "только для чтения" когда мы собираемся инсталлировать новое ядро или что-то поменять в файлах загрузчика. Если нам необходимо туда что-либо писать, то предварительно нужно перевести этот раздел в режим "чтения-записи". Сделать это можно по-разному, но мне нравится следующий вариант:
# mount -o remount,rw /boot
Теперь нам каталок /boot доступен и в режиме "записи" тоже. Вернуть этот каталог обратно в режим "только для чтения" можно либо перегрузив систему (наш каталог опять подмонтируется в режиме "только для чтения"), либо выполнить следующую команду в консоли:
# mount -o remount,ro /boot
Не забываем "выходить" из каталога перед операциями перемонтирования, иначе система ругнется на это.

Для этого раздела оптимально использовать ext2 файловую систему, так как обращение загрузчика производится без помощи ОС, а журналирование здесь не нужно.

/swap
На счет файла подкачки не все так однозначно. Существуют различные мнения по поводу размера swap-раздела, в зависимости от размера оперативки. Как я понял, то в ноутбуках имеет смысл делать swap-раздел размером с оперативку, так как в режиме "засыпания" ноут должен скинуть всю свою оперативную память на жесткий диск.

Где-то я встречал рекомендации, что достаточно делать swap-раздел в половину от объема ОЗУ. В таком варианте я работал довольно долго, и хочу отметить, что он вполне приемлем для работы. Однако, в связи с появлением возможности использования виртуальных машин типа Qemu и VirtualBox, такого расчета раздела подкачки оказывается недостаточно.

При использовании большого объема ОЗУ все немного иначе. Есть утверждение, что при использовании ОЗУ в 2 Гб и более, swap-раздел не нужен вообще. С этим трудно спорить, и я сделал бы также (при наличии такого количества памяти). Но, повторюсь, что для ноутбуков раздел подкачки - вещь актуальная.

Вывод: каждый решает сам, но в данном случае используем вариант расчета swap-раздела, когда он равен объему оперативки.

/ (корневой раздел)
Какие-то специальные параметры монтирования этого раздела, я обычно не задаю. Система сама прописывает в файле /etc/fstab следующее:
defaults,errors=remount-ro
Это означает, что подключение происходит с параметрами по умолчанию, а в случае каких-либо ошибок (которые, например, могут возникнуть при загрузке Дебиана), данный раздел будет подмонтирован в режиме "только для чтения". Что меня вполне устраивает.

Файловую систему, я обычно применяю ext3, т.к. журналирование здесь очень даже не помешает.

/tmp
Это каталог хранения временных файлов, и после перезагрузки он должен быть пустым.
Смысл его выноса на отдельную партицию, это исключить дыру в безопасности системы.
Именно поэтому накладываем ограничения в виде nodev, nosuid, noexec. Значения параметров:
  • nodev - не позволяет создавать и использовать на этой файловой системе файлы символьных или блочных устройств
  • nosuid — на этой файловой системе не действует бит suid (исполнение программы от имени её владельца, а не запустившего её пользователя)
  • noexec — запрет запуска с этой файловой системы (однако, скрипты всё равно можно будет запустить командой bash скрипт.sh)
На счет опции noexec: бывали случаи, что некоторый софт (как я понял - не очень корректно написанный) требует возможности запуска с этой файловой системы, поэтому тут нужно пробовать. Я бы рекомендовал после завершения инсталляции всех необходимых программ в системе попробовать включить эту опцию (помним, что это делается в файле /etc/fstab) и поработать в ней. В случае каких-то проблем в работе, отключить ее (удалить с /etc/fstab и перегрузиться, например) и снова попробовать работать. В общем в таком ключе. Еще раз отмечу, что эта опция очень важный момент в безопасности системы.

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

/var/log
Многие советуют подключать как отдельную партицию и сам каталог /var, но я ограничился лишь этим каталогом, т.к. считаю, что это важнее с точки зрения безопасности, но так же не охота создавать на своем десктопе "гирлянду" из разделов. Это пришло, наверное, от серверов, т.к. при сбоях или DoS атаках размер журналов может резко увеличиваться, тем самым переполняя этот раздел. И если он не вынесен в отдельный раздел, т.е. находится в разделе /(корневом), то его переполнение может заблокировать всю систему целиком. А так - ничего страшного не произойдет, разве что ошибки о невозможности создания журнала.
Значения параметра:
  • noatime - при каждом доступе (в том числе чтении) к файлу в inode обновляется время последнего доступа к файлу, что требуется крайне редко, при использовании этой опции это обновление производиться не будет. Важность установки опции noatime в том, что она устраняет необходимость операции записи в файловую систему для файлов, которые просто читаются. Так как запись "дорогая" операция, то ее отсутствие может существенно улучшить эффективность системы.
Для него наилучшим решением будет файловая система reiserfs с опциями noexec, nodev, noatime.

/home
Вот пример строчки из моего файла /etc/fstab:
/dev/sda3       /home           ext3    nodev,noexec  0 2
Значения параметров монтирования приведены выше. Однако, если мы не устанавливаем параметр noexec, то nosuid - очень желателен.

Файловую систему, наверное имеет смысл делать reiserfs, однако у меня это ext3: как-то так повелось исторически, а переделывать я не стал.

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

Некоторая дополнительная информация по данной теме :
Ну и конечно же Google!
Вот вроде бы и все.

11 коммент.:

Анонимный комментирует...

Думаю, что помимо разметки, хорошо бы и соответствующие ФС (читай - "в тон обоям":]) подобрать. Вот так у меня получилось разметить шестидесятку:
50 ext2 /boot ro
550 swap swap
1000 raser /
10000 raser /usr noatime,nodev
10000 ext3 /var nosuid
5000 raser /tmp nodev, atime
20000 ext3 /home nodev, nosuid
12000 xfs /rip nodev, nosuid
---------------------------------
/tmp большой, т.к. люблю "cat /dev/cdrom > /tmp/my.iso"
/rip -- для хранения отборной колекции немецких фильмов :)

virens комментирует...

"простым вариантом" пользуюсь и горя не знаю :-)

Насчёт "атак и взломов" машин с Линуксом - это фантастика, если только машина не крутой веб-сервер и не содержит кучу сервисов. Правильно настроенный SSH с запрещением заходов из внешней сети - залог спокойного сна. У меня десктоп включён 24\7 и торчит в сети круглые сутки. Кроме нескольких сопливых попыток попинговать и пары раз в неделю постучаться в SSH и telnet (!) ничего серьёзного.

Статья классная, очень подробно всё расписано.

SIR комментирует...

2 Анонимный:
Нармально! Главное понимать, что и для чего делается. Лично я вот пока не просек для чего на десктопе нужно выносить /usr в отдельную партицию.. Поэтому я его оставляю в корне (/). На счет использования в корне raser -a должно быть оч. неплохо..
Да, и еще c командой сat /dev/cdrom нужно быть поосторожнее, т.к. она будет создавать образ диска таким какой он есть. И если на нем будут какие-нить нечитабельные/ошибочные данные, то эта команда их так же и "сольет" в исошник. Я предпочитаю это делать в k3b - он в подобных случаях пытается восстановить данные с диска, т.е. работает более интелектуально. ИМХО.
2 virens:
на счет фантастики - может быть. Однако бдительности терять не будем! Чем больше линуксоидов - тем больше подобных проблем. Вопрос только времени. Тоже ИМХО.
Сам предпочитаю вариант "оптимальный" где без И-Нета..
:-)

va1e комментирует...

Статья хорошая, доступная. Выношу в bookmarks. Сам пользую "Вариант 2 - оптимальный." с небольшими изменениями: своп - 1200мб, так уж Oracle приказал. а насчет /home есть такая мысль, что если химичишь с дистрибутивами, можно всегда в fstab прописать путь к /home и пользовать несколько ОС с одним домашним каталогом.

SIR комментирует...

Путь к /home прописать в /etc/fstab-е можно, конечно же. Но я заострял внимание, что /home находится на отдельной партиции. А так он хоть на другом диске - разницы нету..

Анонимный комментирует...

2sir
>Лично я вот пока не просек для чего на десктопе нужно выносить /usr в отдельную партицию..
Если не вынести, то монтировать корень с nodev сомнительное удовольствие. noatime для /usr прокатит, а для корня (напрмер, /bin /etc) уже не то.

SIR комментирует...

2 Анонимный:
Если не вынести (речь идет о /usr), то монтировать корень с nodev сомнительное удовольствие.
А какже быть с /dev? Он-то где тогда?
И все-таки, я пока не очень уверен в острой необходимости выноса /usr для монтирования со своими параметрами...

Анонимный комментирует...

2sir
Я не претендую на истину в последней инстанции. Могу прокоментировать свой выбор по пунктам.
#ядро, конфиг бута кладу отдельно и монтирую только для чтения на стандартной ФС т.к. редко подвергается модификации
50 ext2 /boot ro
#своп кладу рядом, поближе к началу "винта"
550 swap swap
#корень на резере с обновлением времени последнего доступа к файлам, т.к. большое количество системных бинарей, конфигов (полезно знать иногда atime). Удобно делать резерв в iso через dd и восстанавливать потом с болванки.
1000 raser /
#это уже "окружение" с неменьшим количеством мелких файлов, но в отличии от корня здесь, на десктопе, я могу забить на atime и даже на fsck и смело монтировать с nodev ибо /dev, /mtn и т.д. остаются все-таки в корне.
10000 raser /usr noatime,nodev
#здесь я использую ext3 т.к. данные весьма разнородные (с одной стороны логи, которые лень выносить, с другой -- кеш пакетов) и спешить просто некуда
10000 ext3 /var nosuid
#сюда может с моей подачи как архивчик развернуться, так и исошка упасть, но надо быстро, т.ч. снова резер. atime -- из суеверных опасений глюков с компиляцией при неверных значениях времени (типа объектник создан раньше исходника -- бывает)
5000 raser /tmp nodev, atime
#домашний каталог -- тексты, картинки, музыка, фильмы. Такой "зоопарк" я не хочу помещать на резер по причине ненадобности мне здесь "tail packing" по аналогии с /var
20000 ext3 /home nodev, nosuid
#сюда я складываю строго фильмы, iso-образы, в т.ч. debian-disk1.iso . Фрагментация тут исчезающе мала, поэтому xfs, под "толстые" файлы.
12000 xfs /rip nodev, nosuid

Просто так получилось из общих соображений :)))

SIR комментирует...

Спасибо Анонимный за такое исчервывающее пояснение! Все развернуто и лаконично.
:-)
Думаю, это будет полезно.

Анонимный комментирует...

Вот это делаю я:

/boot -- 100
swap -- 2000
/ -- 8000
/home -- остальное

Незнаю насколько это экономично, но это работает ;)
Почему своп большой -- увидел как мандрива разбивает диск - офигел - под swap 3 гига, с тех пор делаю swap 2000. Хотя жалко конечно место. Может быть подскажите чего?

P.S.: Файловая система под boot - ext2, под остальные raserfs.

SIR комментирует...

2 Анонимный:
В принципе, все нормально. Только раздел /boot я делаю меньше, т.к. освоить это пространство у меня не получается (максимум 20 метров занимал..).
На счет Swap раздела - свое мнение я уже высказал выше. Хотя, если определиться трудно, то можно сделать следующее - во время работы (в разных режимах загрузки приложениями) набрать команду free в консоли. Так можно узнать всю правду об использовании системой файла подкачки. И сделать соответствующие выводы.