https://wiki.archlinux.org/api.php?action=feedcontributions&user=TrueBers&feedformat=atomArchWiki - User contributions [en]2024-03-28T22:42:50ZUser contributionsMediaWiki 1.41.0https://wiki.archlinux.org/index.php?title=Direct_modem_connection&diff=232022Direct modem connection2012-10-27T18:28:09Z<p>TrueBers: /* DSL (PPPoE) */ updated for systemd 'systemctl'</p>
<hr />
<div>[[Category:Networking]]<br />
[[es:Direct Modem Connection]]<br />
[[zh-CN:Direct Modem Connection]]<br />
{{Article summary start}}<br />
{{Article summary text|This article describes how one can connect directly to the Internet from an Arch Linux box using an internal modem or external modem in bridge mode. }}<br />
{{Article summary heading|Related}}<br />
{{Article summary text|Most users of external modems or those behind routers should consult the [[Configuring Network]] article instead.}}<br />
{{Article summary end}}<br />
<br />
Due to a lack of developers for dialup issues, connecting Arch to the<br />
Internet with a dialup line requires a lot of manual setup. If at<br />
all possible, set up a dedicated router which can be used as a<br />
default gateway on the Arch box.<br />
<br />
==Analog Modem==<br />
<br />
To be able to use a Hayes-compatible, external, analog modem, you need to at least have the {{Pkg|ppp}} package installed. Modify the file {{ic|/etc/ppp/options}} to suit your needs, following instructions located in {{ic|man pppd}}. You will need to define a chat script to supply your username and password to the ISP after the initial connection has been established. The manpages for pppd and chat have examples in them that should suffice to get a connection up and running if you are up for it. With udev, your serial ports usually are {{ic|/dev/tts/0}} and {{ic|/dev/tts/1}}.<br />
{{Tip| Read [[Dialup without a dialer HOWTO]].}}<br />
<br />
Instead of fighting a glorious battle with the plain pppd, you may opt to install {{pkg|wvdial}} or a similar tool to ease the setup process considerably. In case you are using a so-called WinModem, which is basically a PCI plugin card working as an internal analog modem, you should indulge in the vast information found on the [http://www.linmodems.org/ LinModem] homepage.<br />
<br />
== ISDN ==<br />
<br />
Setting up [[Wikipedia:Integrated_Services_Digital_Network|ISDN]] is done in three steps:<br />
<br />
# Install and configure hardware.<br />
# Install and configure the ISDN utilities.<br />
# Add settings for your ISP.<br />
<br />
=== Install and Configure Hardware ===<br />
<br />
The current Arch stock kernels include the necessary ISDN modules, meaning that you will not need to recompile your kernel unless you are about to use odd ISDN hardware. After physically installing your ISDN card in your machine or plugging in your USB ISDN-Box, you can try loading the modules with modprobe. Nearly all passive ISDN PCI cards are handled by the hisax module, which needs two parameters: type and protocol. You must set protocol to:<br />
<br />
* '1' if your country uses the 1TR6 standard.<br />
* '2' if it uses EuroISDN (EDSS1).<br />
* '3' if you are hooked to a so-called leased-line without D-channel.<br />
* '4' for US NI1.<br />
<br />
Details on all those settings and how to set them is included in the kernel documentation, more specifically in the isdn subdirectory, and available online. The type parameter depends on your card; a list of all possible types can be found in the {{ic|README.HiSax}} kernel documentation. Choose your card and load the module with the appropriate options like this:<br />
<br />
# modprobe hisax type=18 protocol=2<br />
<br />
This will load the {{ic|hisax}} module for my ELSA Quickstep 1000PCI, being used in Germany with the EDSS1 protocol. You should find helpful debugging output in your {{ic|/var/log/everything.log}} file, in which you should see your card being prepared for action. Please note that you will probably need to load some USB modules before you can work with an external USB ISDN Adapter.<br />
<br />
Once you have confirmed that your card works with certain settings, you can add the module options to your [[modprobe]] configuration:<br />
<br />
{{hc|head=/etc/modprobe.d/modprobe.conf|2=<br />
alias ippp0 hisax<br />
options hisax type=18 protocol=2}}<br />
<br />
Alternatively, you can add only the options line here, and add {{ic|hisax}} to your {{ic|MODULES}} array in the [[rc.conf]]. It is your choice, really, but this example has the advantage that the module will not be loaded until it is really needed.<br />
<br />
That being done, you should have working, supported hardware. Now you need the basic utilities to actually use it!<br />
<br />
=== Install and configure the ISDN utilities ===<br />
<br />
Install the {{pkg|isdn4k-utils}} package, and read the manpage to {{ic|isdnctrl}}, it will get you started. Further down in the manpage you will find explanations on how to create a configuration file that can be parsed by {{ic|isdnctrl}}, as well as some helpful setup examples. Please note that you have to add your SPID to your MSN setting separated by a colon if you use US NI1.<br />
<br />
After you have configured your ISDN card with the {{ic|isdnctrl}} utility, you should be able to dial into the machine you specified with the PHONE_OUT parameter, but fail the username and password authentication. To make this work add your username and password to {{ic|/etc/ppp/pap-secrets}} or {{ic|/etc/ppp/chap-secrets}} as if you were configuring a normal analogous PPP link, depending on which protocol your ISP uses for authentication. If in doubt, put your data into both files.<br />
<br />
If you set up everything correctly, you should now be able to establish a dial-up connection with:<br />
<br />
# isdnctrl dial ippp0<br />
<br />
If you have any problems, remember to check the logfiles!<br />
<br />
==DSL (PPPoE)==<br />
<br />
These instructions are relevant to you only if your PC itself is supposed to manage the connection to your ISP. You do not need to do anything but define a correct default gateway if you are using a separate router of some sort to do the grunt work.<br />
<br />
Before you can use your DSL online connection, you will have to physically install the network card that is supposed to be connected to the DSL-Modem into your computer. After adding your newly installed network card to the {{ic|modules.conf}}/{{ic|modprobe.conf}}, you should install the {{Pkg|rp-pppoe}} package and run the {{ic|pppoe-setup}} script to configure your connection. After you have entered all the data, you can connect and disconnect your line with<br />
<br />
# systemctl start adsl<br />
<br />
and<br />
<br />
# systemctl stop adsl<br />
<br />
respectively. The setup is usually easy and straightforward, but feel free to read the manpages for hints. <br />
<br />
If you want to automatically 'dial in' at boot, issue command<br />
<br />
# systemctl enable adsl<br />
<br />
or<br />
<br />
# systemctl disable adsl<br />
<br />
to remove auto 'dial in' at boot.<br />
<br />
== Dial-up without a dialer ==<br />
<br />
This page tells you how you can execute {{ic|pppd}} directly without using dialer software such as {{ic|pon}}/{{ic|poff}}, {{ic|wvdial}}, {{ic|kppp}}, etc. It stays connected throughout X server shutdowns and is extremely simple, in accordance with Arch philosophy.<br />
<br />
* Back up {{ic|/etc/ppp/options}}<br />
<br />
# mv /etc/ppp/options /etc/ppp/options.old<br />
<br />
* Create new {{ic|/etc/ppp/options}} using this template:<br />
<br />
lock<br />
modem<br />
debug<br />
</dev/DEVICE><br />
115200<br />
defaultroute<br />
noipdefault<br />
user <USERNAME><br />
connect 'chat -t60 \"\" ATZ OK ATX3 OK ATDT<NUMBER> CONNECT'<br />
<br />
Replace </dev/DEVICE> with your modem device. For comparison with another operating system device, take a good look at the next table,<br />
<br />
Windows GNU/Linux<br />
COM1 --> /dev/ttyS0<br />
COM2 --> /dev/ttyS1<br />
COM3 --> /dev/ttyS2<br />
...<br />
<br />
Edit to point device to your modem device, to use your dial-up account username, and to dial your ISP's number after the ATDT. You can disable call waiting using ATDT 70,15555555 (in North America, anyway). You may also wish to edit the dialer commands; [http://www.google.com search] for information on how to do this. If your ISP uses [[Wikipedia:Challenge-Handshake_Authentication_Protocol|CHAP]], then the next file is {{ic|chap-secrets}}.<br />
<br />
* Edit {{ic|/etc/ppp/chap-secrets}}. See [http://www.tldp.org/HOWTO/PPP-HOWTO/x1005.html The PAP/CHAP secrets file] for more details.<br />
<br />
"USERNAME" * "PASSWORD"<br />
<br />
* Now you are ready to connect. Connect (as root) using {{ic|pppd /dev/modem}} (or whatever device your modem is connected as).<br />
<br />
To disconnect, use {{ic|killall pppd}}.<br />
<br />
If you wish to connect as user, you can use {{Pkg|sudo}}. Configure sudo to call the above commands for your user, and you can use the following aliases in your {{ic|~/.bashrc}} (or {{ic|/etc/bash.bashrc}} for system-wide availability):<br />
<br />
alias dial='sudo /usr/sbin/pppd /dev/modem'<br />
alias hang='sudo /usr/bin/killall pppd'<br />
<br />
Now you can connect by running {{ic|dial}} from a terminal and disconnect with {{ic|hang}}.</div>TrueBershttps://wiki.archlinux.org/index.php?title=Solid_state_drive_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=231407Solid state drive (Русский)2012-10-25T09:28:01Z<p>TrueBers: synced with EN article, fixed some stylistic and grammar typos</p>
<hr />
<div>[[Category:Storage (Русский)]]<br />
[[en:Solid State Drives]]<br />
[[it:Solid State Drives]]<br />
[[zh-CN:Solid State Drives]]<br />
{{Article summary start|Описание}}<br />
{{Article summary text|В этой статье рассматриваются многие аспекты твердотельных накопителей (Solid State Drives), поскольку они относятся к Linux; тем не менее, основные принципы и ключевые понятия представленные в статье, являются достаточно общими, чтобы быть применимыми к другим операционным системам, таким как Windows или Mac OS X. }}<br />
{{Article summary heading|Полезные ссылки}}<br />
{{Article summary wiki|SSD Benchmarking}}<br />
{{Article summary wiki|SSD Memory Cell Clearing}}<br />
{{Article summary end}}<br />
<br />
==Введение==<br />
Твердотельные накопители (SSD) не достаточно просто подключить чтобы они заработали должным образом. Необходимо учитывать некоторые специфичные вещи для достижения оптимальной производительности, такие как выравнивание разделов, выбор файловой системы, поддержка TRIM и т. д. Статья пытается охватить общую информацию и ключевые понятия, чтобы позволить пользователям получить максимальную отдачу от твердотельных дисков под Linux. Рекомендуется прочесть статью полностью перед тем, как следовать рекомендациям.<br />
<br />
{{Note|Хотя статья и предназначена для пользователей Linux, большая часть информации может относиться также и к другим операционным системам, таким как BSD, Mac OS X или Windows.}}<br />
===Преимущества перед HDD===<br />
*Высокая скорость чтения. В 2-3 раза быстрее современных HDD (7200 об/мин на интерфейсе SATA2).<br />
*Устойчивая скорость чтения. Скорость чтения не уменьшается на протяжении всего объёма диска, тогда как производительность HDD падает при перемещении головок от края пластин к центру.<br />
*Минимальное время доступа. Приблизительно в 100 раз быстрее HDD. Например, 0,1 мс для SSD против 12-20 мс для HDD.<br />
*Высокая степень надежности.<br />
*Отсутствие движущихся частей.<br />
*Минимальный нагрев.<br />
*Минимальное потребление энергии. 1-2 Вт для SSD против 10-30 Вт для HDD (в зависимости от об/мин).<br />
*Легкие. Идеальное решение для ноутбуков.<br />
<br />
===Недостатки===<br />
*Цена за единицу объёма (десятки долларов за ГБ на SSD, тогда как стоимость ГБ для HDD измеряется копейками).<br />
*Ёмкость представленных моделей SSD намного ниже оной для HDD.<br />
*Большие ячейки памяти требуют различных оптимизаций файловых систем. Низкий уровень доступа скрыт за контроллером, в то время как современные ОС могли бы использовать низкий уровень для собственных оптимизаций.<br />
*Разделы и файловые системы требуют специальных оптимизаций. Размер страницы и размер стираемой страницы автоматически не определяется.<br />
*Ячейки изнашиваются. MLC-ячейки, произведённые по 50нм техпроцессу, могут выдерживать до 10 тысяч циклов записи; 35нм обычно выдерживают всего 5000 циклов, а 25нм — 3000 (чем меньше техпроцесс, тем больше плотность и ниже цена). Если участки записи распределены соответствующим образом, не слишком малы и верно выровнены, это увеличивает срок жизни ячеек пропорционально общему объёму.<br />
*Сложные прошивки и контроллеры. В них часто встречаются баги. Современные потребляют мощность, сравнимую с HDD. Они [https://lwn.net/Articles/353411/ реализуют] подобие журнально-структурированной файловой системы со сборкой мусора, переводят команды SATA, изначально предназначенные для HDD; некоторые реализуют сжатие на лету. Также контроллер распределяет циклы записи по всей области диска для предотвращения быстрого износа ячеек, объединяет несколько команд записи мелких данных в одну, опять же, для увеличения продолжительности жизни диска. Наконец, "мозги" твердотельных накопителей перемещают ячейки с данными по диску, чтобы те со временем не потеряли содержимое.<br />
*Может падать производительность в зависимости от заполненности диска. Не все производители реализовывают сборку мусора достаточно хорошо, поэтому фрагментированное свободное пространство не всегда объединяется в целые ячейки.<br />
<br />
==На что обращать внимание перед покупкой==<br />
Есть несколько ключевых особенностей, на которые стоит обратить внимание до покупки SSD.<br />
===Ключевые особенности===<br />
*Родная поддержка [http://en.wikipedia.org/wiki/TRIM TRIM]. Это жизненно необходимая функция для продления срока службы SSD и предотвращения уменьшения производительности операций записи от времени.<br />
*Также ключом является покупка SSD верного объема. Для эффективной работы разделы во всех файловых системах должны быть заполнены не более, чем на 75%.<br />
<br />
===Обзоры===<br />
Обзоры не такие уж полные, но основные ключевые особенности они освещают.<br />
*[http://www.anandtech.com/show/2738 SSD Anthology (history lesson, a bit dated)]<br />
*[http://www.anandtech.com/show/2829 SSD Relapse (refresher and more up to date])<br />
*[http://forums.anandtech.com/showthread.php?t=2069761 One user's recommendations]<br />
*[http://techgage.com/article/enabling_and_testing_ssd_trim_support_under_linux/ Enabling and Testing SSD TRIM Support Under Linux]<br />
<br />
==Советы по увеличению производительности SSD==<br />
===Параметры монтирования===<br />
Существует несколько ключевых параметров монтирования, используемых в {{ic|/etc/fstab}} для разделов на SSD.<br />
<br />
*'''noatime''' - Во время чтения файлов не будет обновляться поле atime файловой системы, указывающее время последнего доступа к файлу. Важность данного параметра в том, что он убирает необходимость системы производить "ненужные" операции записи когда файл всего-навсего необходимо прочитать. Т. к. эти операции записи могут быть достаточно интенсивными при чтении большого количества файлов, отключение может дать неплохой прирост производительности и срока жизни. Заметьте, что информация о времени последней записи файла будет по-прежнему обновляться каждый раз, когда файл будет изменён.<br />
** Однако, эта опция может вызвать проблемы с некоторыми программами, такими как [[Mutt]], т. к. время доступа к файлу станет меньше, чем время изменения, что вызовет проблемы в работе. Использование опции '''relatime''' вместо noatime позволит быть уверенным, что поле atime никогда не станет меньше, чем время изменения.<br />
*'''discard''' - Параметр discard включает команду TRIM для ядер версии 2.6.33 и выше. Не работает с файловой системой ext3; если всё же он включен на ext3, корневой раздел будет смонтирован только для чтения.<br />
<br />
/dev/sda1 / ext4 defaults,relatime,discard 0 1<br />
/dev/sda2 /home ext4 defaults,relatime,discard 0 1<br />
<br />
{{Warning|Пользователь должен убедиться ещё ДО попытки монтирования раздела с опцией {{ic|discard}}, что он работает на ядре версии 2.6.33 или выше, а также, что его SDD поддерживает TRIM. Иначе можно потерять данные!}}<br />
<br />
===Включение Discard через tune2fs===<br />
Можно также статически установить флаг поддержки TRIM с помощью tune2fs или при создании раздела.<br />
<br />
# tune2fs -o discard /dev/sdXY<br />
или<br />
# mkfs.ext4 -E discard /dev/sdXY<br />
<br />
{{Note| После установки этой опции, команда mount НЕ будет показывать флаг discard в списке смонтированных ФС, даже если флаг указан явно в опциях командной строки несмотря на добавленный через tune2fs или mkfs. См. соответствующую тему в обсуждении: https://bbs.archlinux.org/viewtopic.php?id&#61;137314}}<br />
<br />
=== I/O планировщик ===<br />
Рассмотрим переход со стандартного [https://en.wikipedia.org/wiki/CFQ CFQ] планировщика (Completely Fair Queuing) начиная с ядра 2.6.18 к планировщикам [http://en.wikipedia.org/wiki/Noop_scheduler NOOP] или [http://en.wikipedia.org/wiki/Deadline_scheduler Deadline]. Последние два обеспечивают повышение производительности SSD. Планировщик NOOP, например, реализует простую очередь входящих запросов чтения/записи без их переупорядочивания или группировки. На SSD, в отличие от HDD, время доступа одинаково для всех секторов, поэтому изменение порядка запросов не имеет смысла.<br />
<br />
Больше информации о планировщиках смотрите здесь: [http://www.linux-mag.com/id/7564/1 Linux Magazine article], [http://www.phoronix.com/scan.php?page=article&item=linux_iosched_2012 Phoronix benchmark] и {{Bug|22605}}.<br />
<br />
Arch по умолчанию использует планировщик CFQ. Убедиться в этом можно, выведя содержимое файла {{ic|/sys/block/sdX/queue/scheduler}}:<br />
$ cat /sys/block/sdX/queue/scheduler<br />
noop deadline [cfq]<br />
Планировщик, используемый в данный момент, выделен квадратными скобками. <br />
<br />
===== Параметр ядра (в системе только SSD) =====<br />
Если в системе нет других типов накопителей кроме SSD, планировщик включается параметром ядра {{ic|1=elevator=noop}}. Для дополнительного ознакомления смотрите [[Kernel parameters]].<br />
<br />
===== Использование виртуальной ФС sys (для нескольких типов накопителей) =====<br />
Этот метод используется, когда в системе установлено несколько физических накопителей разных типов (например, одновременно SSD и HDD).<br />
Добавьте следующую строку в {{ic|/etc/rc.local}}:<br />
echo noop > /sys/block/sdX/queue/scheduler<br />
где X — буква вашего SSD устройства.<br />
<br />
Из-за вероятности того, что udev может назначить дискам разные ноды в {{ic|/dev/}} после обновления ядра, пользователь должен убедиться, что планировщик NOOP во время загрузки применился к нужному устройству. Один из способов заключается в использовании идентификатора диска для определения его ноды в {{ic|/dev/}}. Для этого используйте данный кусок кода вместо строки выше и добавьте его в {{ic|/etc/rc.local}}:<br />
declare -ar SSDS=(<br />
'scsi-SATA_SAMSUNG_SSD_PM8_S0NUNEAB861972'<br />
'ata-SAMSUNG_SSD_PM810_2.5__7mm_256GB_S0NUNEAB861972'<br />
)<br />
<br />
for SSD in "${SSDS[@]}" ; do<br />
BY_ID=/dev/disk/by-id/$SSD<br />
<br />
if &#91;&#91; -e $BY_ID ]] ; then<br />
DEV_NAME=`ls -l $BY_ID | awk '{ print $NF }' | sed -e 's/[/\.]//g'`<br />
SCHED=/sys/block/$DEV_NAME/queue/scheduler<br />
<br />
if &#91;&#91; -w $SCHED ]] ; then<br />
echo noop > $SCHED<br />
fi<br />
fi<br />
done<br />
где {{ic|SSDS}} — массив Bash, содержащий идентификаторы всех SSD-дисков. Идентификаторы перечислены в директории {{ic|/dev/disk/by-id/}} в виде символьных ссылок на соответствующие ноды в {{ic|/dev/}}. Чтобы увидеть ссылки и то, куда они указывают, выполните команду:<br />
ls -l /dev/disk/by-id/<br />
<br />
=====Использование udev как для одного накопителя, так и для нескольких разных=====<br />
Хотя вышеописанные методы будут работать без проблем, ниже представлено также довольно надёжное решение. Следует отметить, что с переходом на [[systemd]], файл rc.local больше не существует. Следовательно, было бы предпочтительнее использовать систему, которая отвечает за устройства, в первую очередь для реализации планировщика. В нашем случае это udev, и чтобы осуществить задуманное, всё что нам нужно — простое [[udev]]-правило.<br />
<br />
Создайте файл в директории /etc/udev/rules.d с именем, например, '60-schedulers.rules'. Запишите в него следующие строки:<br />
# установка планировщика deadline для SSD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"<br />
<br />
# установка планировщика cfq для HDD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"<br />
Конечно же вы можете заменить deadline/cfq любыми другими планировщиками. Изменения вступают в силу после перезагрузки. Чтобы проверить сработало ли правило, выполните команду<br />
$ cat /sys/block/sdX/queue/scheduler #где X — буква физического накопителя<br />
{{note|Имейте в виду, CFQ является планировщиком по умолчанию, так что второе правило на самом деле не нужно, если вы пользуетесь стандартным ядром. Также в примере имя правила начинается с числа 60, т. к. это число udev использует для своих строгих правил именования. Блочные устройства в этом диапазоне чисел могут модифицироваться, и это безопасная позиция для данного правила. Однако, правило может называться как угодно, при этом оканчиваться на '.rules'. (Источник: falconindy и w0ng на своём блоге)}}<br />
<br />
=== Разделы подкачки на SSD ===<br />
Можно размещать раздел подкачки на SSD. Но с другой стороны, современные компьютеры, имеющие более 2 ГБ оперативной памяти, используют раздел подкачки очень редко. Заметным исключением являются системы, которые используют спящий режим. Следующая оптимизация для SSD уменьшает "swappiness" системы, чтобы избежать записей подкачки:<br />
<br />
# echo 1 > /proc/sys/vm/swappiness<br />
<br />
Или можно просто изменить файл {{ic|/etc/sysctl.conf}} как рекомендуется в вики-статье [[Maximizing_performance#Swappiness|Maximizing Performance]]:<br />
<br />
vm.swappiness=1<br />
vm.vfs_cache_pressure=50<br />
<br />
=== Очистка ячеек памяти SSD ===<br />
В некоторых случаях, пользователь может полностью сбросить ячейки SSD в состояние, подобное моменту покупки нового накопителя, таким образом добиться [http://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 заводской производительности]. Скорость записи уменьшается со временем даже с поддержкой TRIM. TRIM работает только с удалением файлов, но не с перемещением и инкрементальными сохранениями.<br />
<br />
Сброс ячеек легко выполнить за 3 шага, описанных в вики-статье [[SSD Memory Cell Clearing]].<br />
<br />
==Советы для уменьшения операций чтения/записи==<br />
Основной идеей долговечного использования SSD является перенос интенсивных операция ввода/вывода в оперативную память или HDD, в основном из-за большого размера блока очистки (512 КиБ в некоторых случаях).<br />
<br />
{{Note|32ГБ SSD с посредственным 10-кратным показателем write amplification, стандартными 10000 циклами чтения/записи и '''10ГБ записей в день''' дают '''8 лет жизни'''. Также, дольше живут диски с наибольшими объемами и современными контроллерами, которые имеют меньший показатель write amplification.}}<br />
<br />
Используйте команду {{ic|iotop -oPa}} и отсортируйте по количеству записей, чтобы увидеть сколько пишется на диск.<br />
<br />
=== Продуманная схема разделов ===<br />
Если в системе установлены одновременно оба типа дисков (HDD и SSD), то рекомендуется монтировать раздел {{ic|/var}} на HDD, чтобы продлить жизнь SSD, избежав на нём множества операций чтения/записи.<br />
<br />
Если же SSD является единственным диском в системе, и нет возможности использовать его совместно с HDD, разумно так же выделить отдельный раздел для {{ic|/var}}, чтобы в дальнейшем при возникновении ошибки было легче восстановить систему. Например, если программа использовала всё доступное пространство в {{ic|/}}, какой-либо лог превысил все разумные размеры, и т. п.<br />
<br />
=== Опция монтирования noatime ===<br />
Монтируйте разделы SSD с опцией {{ic|noatime}}. См. раздел [[#Параметры монтирования|Параметры монтирования]].<br />
<br />
=== Расположите часто используемые файлы в оперативной памяти ===<br />
==== Профили браузеров ====<br />
Довольно просто можно перенести профили браузеров, таких как chromium, firefox, opera, и т.д. в оперативную память через tmpfs и использовать rsync для синхронизации с копиями на диске. Таким образом можно так же заметно сократить количество операций чтения/записи.<br />
<br />
В AUR есть несколько пакетов для автоматизации этой операции, например {{AUR|profile-sync-daemon}}.<br />
<br />
==== Другие файлы ====<br />
По этой же вышеописанной причине можно расположить в оперативной памяти раздел {{ic|/srv/http}} (если запущен web-сервер). Аналогом {{AUR|profile-sync-daemon}} здесь будет {{AUR|anything-sync-daemon}}, который позволяет определить '''любую''' директорию для синхронизации с оперативной памятью.<br />
<br />
{{Warning|Не пытайтесь добавлять /var/log в anything-sync-daemon. Systemd очень разозлится на это.}}<br />
<br />
=== Компиляция в tmpfs ===<br />
Перенос интенсивной компиляции в {{ic|/tmp}} — отличная идея продления срока жизни диска. Если у вас имеется более 4ГБ оперативной памяти, строку tmp из {{ic|/etc/fstab}} нужно изменить, чтобы раздел использовал больше половины доступной памяти, через параметр {{ic|1=size=}}, т. к. {{ic|/tmp}} при компиляции растёт очень быстро.<br />
<br />
Пример для машины с 8ГБ оперативки:<br />
tmpfs /tmp tmpfs nodev,nosuid,size=7G 0 0<br />
<br />
=== Отключение журналирования ФС ===<br />
Использование журналируемых ФС типа ext3 или ext4 с отключенным журналом тоже сократит количество записей на SSD. Очевидным недостатком этого будет являться потеря данных при неудачном размонтировании (резкое отключение питания, блокировка ядра и т. д.). Однако, [http://tytso.livejournal.com/61830.html Ted Tso] выступает в защиту журналирования на современных SSD, т. к. по его тестам оно незначительно влияет на количество записей в большинстве случаев:<br />
<br />
'''Количество записанных данных (в мегабайтах) на ФС ext4 с параметром noatime.'''<br />
{| border="1" cellpadding="5"<br />
! операция !! с журналом !! без журнала !! разница<br />
|-<br />
!git clone<br />
|367.0<br />
|353.0<br />
|3.81 %<br />
|-<br />
!make<br />
|207.6<br />
|199.4<br />
|3.95 %<br />
|-<br />
!make clean<br />
|6.45<br />
|3.73<br />
|42.17 %<br />
|}<br />
<br />
''"Результаты показали, что записанный объём при работе с большим количеством мета-данных почти в 2 раза выше, чем реальный размер файлов. Это ожидаемо, т. к. все изменения в блоках мета-данных сначала пишутся в журнал, и транзакция журнала сбрасывается перед тем, как мета-данные будут записаны в конечное положение на диск. Однако же, для обычных задач, где данные пишутся сразу за мета-данными, разница в лишних операциях записи минимальна."''<br />
<br />
{{Note|Пример make clean из таблицы выше показывает важность переноса компиляции в tmpfs как рекомендовано в предыдущем разделе!}}<br />
<br />
=== Выбор файловой системы ===<br />
Существуют различные варианты файловых систем на выбор, включая Ext2/3/4, Btrfs, и т. д.<br />
<br />
==== Btrfs ====<br />
Поддержка [http://en.wikipedia.org/wiki/Btrfs Btrfs] включена в ядро с версии 2.6.29. Некоторые считают, что она является не достаточно стабильной для повседневного использования, в то время как есть и явные сторонники этого потенциального преемника ext4. Рекомендуется прочитать статью [[Btrfs]] для дополнительного ознакомления.<br />
<br />
==== Ext4 ====<br />
[http://en.wikipedia.org/wiki/Ext4 Ext4] — ещё одна файловая система, поддерживающая SSD. Считается стабильной и пригодной для повседневного использования с версии ядра 2.6.28. В отличие от Btrfs, ext4 не умеет автоматически определять тип диска; пользователь сам должен явно включить поддержку команды TRIM, используя параметр монтирования {{ic|discard}} в [[fstab]] (или командой {{ic|tune2fs -o discard /dev/sdaX}}).<br />
См. [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/filesystems/ext4.txt официальную документацию ядра] для подробного ознакомления c ext4.<br />
<br />
== Тестирования производительности SSD ==<br />
См. статью [[SSD Benchmarking]] с данными о тестировании и результатами некоторых SSD.<br />
<br />
== Обновление прошивок ==<br />
=== OCZ ===<br />
Для дисков компании OCZ имеется утилита командной строки для Linux (i686 и x86_64) на официальном [http://www.ocztechnology.com/ssd_tools/ форуме].<br />
<br />
== См. также ==<br />
* [http://www.reddit.com/r/archlinux/comments/rkwjm/what_should_i_keep_in_mind_when_installing_on_ssd/ Discussion on Reddit about installing Arch on an SSD]</div>TrueBershttps://wiki.archlinux.org/index.php?title=%D0%A2%D0%B2%D0%B5%D1%80%D0%B4%D0%BE%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%BA%D0%BE%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D0%B8&diff=228776Твердотельные накопители2012-10-14T20:39:56Z<p>TrueBers: discard flag enable with tune2fs\mkfs. noatime\relatime notice added\edited</p>
<hr />
<div>[[Category:Storage (Русский)]]<br />
[[en:Solid State Drives]]<br />
[[it:Solid State Drives]]<br />
[[zh-CN:Solid State Drives]]<br />
{{Article summary start|Описание}}<br />
{{Article summary text|В этой статье рассматриваются многие аспекты твердотельных накопителей (Solid State Drives), поскольку они относятся к Linux; тем не менее, основные принципы и ключевые понятия, представленные в статье являются достаточно общими, чтобы быть применимыми к другим операционным системам, таким как Windows или Mac OS X. }}<br />
{{Article summary heading|Полезные ссылки}}<br />
{{Article summary wiki|SSD Benchmarking}}<br />
{{Article summary wiki|SSD Memory Cell Clearing}}<br />
{{Article summary end}}<br />
<br />
==Введение==<br />
Твердотельные накопители (SSD) не достаточно просто подключить чтобы они заработали должным образом. Необходимо учитывать некоторые специфичные вещи для достижения оптимальной производительности, такие как выравнивание разделов, выбор файловой системы, поддержка TRIM и т.д.. Статья пытается охватить общую информацию и ключевые понятия, чтобы позволить пользователям получить максимальную отдачу от твердотельных дисков под Linux. Рекомендуется прочесть статью полностью перед тем, как следовать рекомендациям.<br />
<br />
{{Note|Хотя статья и предназначена для пользователей Linux, большая часть информации может относиться также и к другим операционным системам, таким как BSD, Mac OS X или Windows.}}<br />
===Преимущества перед HDD===<br />
*Высокая скорость чтения. В 2-3 раза быстрее современных HDD (7200 об/мин на интерфейсе SATA2).<br />
*Устойчивая скорость чтения. Скорость чтения не уменьшается на протяжении всего объёма диска, тогда как производительность HDD падает при перемещении головок от края пластин к центру.<br />
*Минимальное время доступа. Приблизительно в 100 раз быстрее HDD. Например, 0,1 мс для SSD против 12-20 мс для HDD.<br />
*Высокая степень надежности.<br />
*Отсутствие движущихся частей.<br />
*Минимальный нагрев.<br />
*Минимальное потребление энергии. 1-2 Вт для SSD против 10-30 Вт для HDD (в зависимости от об/мин).<br />
*Легкие. Идеальное решение для ноутбуков.<br />
<br />
===Недостатки===<br />
*Цена за единицу объёма (десятки долларов за ГБ на SSD, тогда как стоимость ГБ для HDD измеряется копейками).<br />
*Ёмкость представленных моделей SSD намного ниже оной для HDD.<br />
*Большие ячейки памяти требуют различных оптимизаций файловых систем. Низкий уровень доступа скрыт за контроллером, в то время как современные ОС могли бы использовать низкий уровень для собственных оптимизаций.<br />
*Разделы и файловые системы требуют специальных оптимизаций. Размер страницы и размер стираемой страницы автоматически не определяется.<br />
*Ячейки изнашиваются. MLC-ячейки, произведённые по 50нм техпроцессу, могут выдерживать до 10 тысяч циклов записи; 35нм обычно выдерживают всего 5000 циклов, а 25нм — 3000 (чем меньше техпроцесс, тем больше плотность и ниже цена). Если участки записи распределены соответствующим образом, не слишком малы и верно выровнены, это увеличивает срок жизни ячеек пропорционально общему объёму.<br />
*Сложные прошивки и контроллеры. В них часто встречаются баги. Современные потребляют мощность, сравнимую с HDD. Они [https://lwn.net/Articles/353411/ реализуют] подобие журнально-структурированной файловой системы со сборкой мусора, переводят команды SATA, изначально предназначенные для HDD; некоторые реализуют сжатие на лету. Также контроллер распределяет циклы записи по всей области диска для предотвращения быстрого износа ячеек, объединяет несколько команд записи мелких данных в одну, опять же, для увеличения продолжительности жизни диска. Наконец, "мозги" твердотельных накопителей перемещают ячейки с данными по диску, чтобы те со временем не потеряли содержимое.<br />
*Может падать производительность в зависимости от заполненности диска. Не все производители реализовывают сборку мусора достаточно хорошо, поэтому фрагментированное свободное пространство не всегда объединяется в целые ячейки.<br />
<br />
==На что обращать внимание перед покупкой==<br />
Есть несколько ключевых особенностей, на которые стоит обратить внимание до покупки современных SSD.<br />
===Ключевые особенности===<br />
*Родная поддержка [http://en.wikipedia.org/wiki/TRIM TRIM]. Это жизненно необходимая функция для продления срока службы SSD и предотвращения уменьшения производительности операций записи от времени.<br />
*Также ключом является покупка SSD верного объема. Для эффективной работы разделы во всех файловых системах должны быть заполнены не более, чем на 75%.<br />
<br />
===Обзоры===<br />
Обзоры не такие уж полные, но основные ключевые особенности они освещают.<br />
*[http://www.anandtech.com/show/2738 SSD Anthology (history lesson, a bit dated)]<br />
*[http://www.anandtech.com/show/2829 SSD Relapse (refresher and more up to date])<br />
*[http://forums.anandtech.com/showthread.php?t=2069761 One user's recommendations]<br />
*[http://techgage.com/article/enabling_and_testing_ssd_trim_support_under_linux/ Enabling and Testing SSD TRIM Support Under Linux]<br />
<br />
==Советы по увеличению производительности SSD==<br />
===Параметры монтирования===<br />
Существует несколько ключевых параметров монтирования, используемых в {{ic|/etc/fstab}} для разделов на SSD.<br />
<br />
*'''noatime''' - Во время чтения файлов не будет обновляться поле atime файловой системы, указывающее время последнего доступа к файлу. Важность данного параметра в том, что он убирает необходимость системы производить "ненужные" операции записи когда файл всего-навсего необходимо прочитать. Т. к. эти операции записи могут быть достаточно интенсивными при чтении большого количества файлов, отключение может дать неплохой прирост производительности и срока жизни. Заметьте, что информация о времени последней записи файла будет по-прежнему обновляться каждый раз, когда файл будет изменён.<br />
** Однако, эта опция может вызвать проблемы с некоторыми программами, такими как [[Mutt]], т. к. время доступа к файлу станет меньше, чем время изменения, что вызовет проблемы в работе. Использование опции '''relatime''' вместо noatime позволит быть уверенным, что поле atime никогда не станет меньше, чем время изменения.<br />
*'''discard''' - Параметр discard включает команду TRIM для ядер версии 2.6.33 и выше. Не работает с файловой системой ext3; если всё же он включен на ext3, корневой раздел будет смонтирован только для чтения.<br />
<br />
/dev/sda1 / ext4 defaults,relatime,discard 0 1<br />
/dev/sda2 /home ext4 defaults,relatime,discard 0 1<br />
<br />
{{Warning|Пользователь должен убедиться ещё ДО попытки монтирования раздела с опцией {{ic|discard}}, что он работает на ядре версии 2.6.33 или выше, а также, что его SDD поддерживает TRIM. Иначе можно потерять данные!}}<br />
<br />
===Включение Discard через tune2fs===<br />
Если вы иногда монтируете ФС на SSD через консоль, будет удобно статическое выставление флага discard с помощью tune2fs или при создании раздела.<br />
<br />
# tune2fs -o discard /dev/sdXY<br />
или<br />
# mkfs.ext4 -E discard /dev/sdXY<br />
<br />
{{Note| После установки этой опции, команда mount НЕ будет показывать флаг discard в списке смонтированных ФС, даже если флаг указан явно в опциях командной строки несмотря на добавленный через tune2fs или mkfs.}}<br />
<br />
=== I/O планировщик ===<br />
Рассмотрим переход со стандартного [https://en.wikipedia.org/wiki/CFQ CFQ] планировщика (Completely Fair Queuing) начиная с ядра 2.6.18 к планировщикам [http://en.wikipedia.org/wiki/Noop_scheduler NOOP] или [http://en.wikipedia.org/wiki/Deadline_scheduler Deadline]. Последние два обеспечивают повышение производительности SSD. Планировщик NOOP, например, реализует простую очередь входящих запросов чтения/записи без их переупорядочивания или группировки. На SSD, в отличие от HDD, время доступа одинаково для всех секторов, поэтому изменение порядка запросов не имеет смысла.<br />
<br />
Больше информации о планировщиках смотрите здесь: [http://www.linux-mag.com/id/7564/1 Linux Magazine article], [http://www.phoronix.com/scan.php?page=article&item=linux_iosched_2012 Phoronix benchmark] и {{Bug|22605}}.<br />
<br />
Arch по умолчанию использует планировщик CFQ. Убедиться в этом можно, выведя содержимое файла {{ic|/sys/block/sdX/queue/scheduler}}:<br />
$ cat /sys/block/sdX/queue/scheduler<br />
noop deadline [cfq]<br />
Планировщик, используемый в данный момент, выделен квадратными скобками. <br />
<br />
===== Параметр ядра (в системе только SSD) =====<br />
Если в системе нет других типов накопителей кроме SSD, планировщик включается параметром ядра {{ic|1=elevator=noop}}. Для дополнительной информации смотрите [[Kernel parameters]].<br />
Дополнительно, для редко используемых жестких дисков может быть настроен на использование CFQ-планировщик, методом объясненным ниже.<br />
Укажите 'cfq' вместо 'noop' и HDD вместо SSD, соответственно.<br />
<br />
===== Использование виртуальной ФС sys (для разных типов накопителей) =====<br />
Этот метод используется, когда в системе установлено несколько физических накопителей разных типов (например, одновременно SSD и HDD).<br />
Добавьте следующую строку в {{ic|/etc/rc.local}}:<br />
echo noop > /sys/block/sdX/queue/scheduler<br />
где X — буква вашего SSD устройства.<br />
<br />
Из-за вероятности того, что udev может назначать дискам разные ноды {{ic|/dev/}} до и после обновления ядра, пользователь должен убедиться, что планировщик NOOP применился к нужному устройству во время загрузки. Один из способов заключается в использовании идентификатора диска, чтобы определить его {{ic|/dev/}} ноду. Чтобы этого добиться, используйте данный кусок кода вместо строки выше и добавьте его в {{ic|/etc/rc.local}}:<br />
declare -ar SSDS=(<br />
'scsi-SATA_SAMSUNG_SSD_PM8_S0NUNEAB861972'<br />
'ata-SAMSUNG_SSD_PM810_2.5__7mm_256GB_S0NUNEAB861972'<br />
)<br />
<br />
for SSD in "${SSDS[@]}" ; do<br />
BY_ID=/dev/disk/by-id/$SSD<br />
<br />
if &#91;&#91; -e $BY_ID ]] ; then<br />
DEV_NAME=`ls -l $BY_ID | awk '{ print $NF }' | sed -e 's/[/\.]//g'`<br />
SCHED=/sys/block/$DEV_NAME/queue/scheduler<br />
<br />
if &#91;&#91; -w $SCHED ]] ; then<br />
echo noop > $SCHED<br />
fi<br />
fi<br />
done<br />
где {{ic|SSDS}} — массив Bash, содержащий идентификаторы всех SSD-дисков. Идентификаторы перечислены в директории {{ic|/dev/disk/by-id/}} в виде символьных ссылок на соответствующие ноды в {{ic|/dev/}}. Чтобы увидеть ссылки и то, куда они указывают, выполните команду:<br />
ls -l /dev/disk/by-id/<br />
<br />
=====Использование udev как для одного накопителя, так и для нескольких разных=====<br />
Хотя вышеописанные методы будут работать без проблем, это также довольно надёжное решение. Следует также отметить, что с переходом на [[systemd]], файл rc.local больше не существует. Следовательно, было бы предпочтительнее использовать систему, которая отвечает за устройства, в первую очередь для реализации планировщика. В нашем случае это udev, и чтобы осуществить задуманное, всё что нам нужно — простое [[udev]]-правило.<br />
<br />
Создайте файл в директории /etc/udev/rules.d с именем, например, '60-schedulers.rules'. Запишите в него следующие строки:<br />
# установка планировщика deadline для SSD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"<br />
<br />
# установка планировщика cfq для HDD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"<br />
Конечно же вы можете заменить deadline/cfq любыми другими планировщиками. Изменения вступают в силу после перезагрузки. Чтобы проверить успешность срабатывания правила, выполните команду<br />
$ cat /sys/block/sdX/queue/scheduler #где X — буква физического накопителя<br />
{{note|Имейте в виду, CFQ является планировщиком по умолчанию, так что второе правило на самом деле не нужно, если вы пользуетесь стандартным ядром. Также в примере имя правила начинается с числа 60, т. к. это число udev использует для своих строгих правил именования. Блочные устройства в этом диапазоне чисел могут модифицироваться, и это безопасная позиция для данного правила. Однако, правило может называться как угодно, при этом оканчиваться на '.rules'. (Источник: falconindy и w0ng на своём блоге)}}<br />
<br />
=== Разделы подкачки на SSD ===<br />
Можно размещать раздел подкачки на SSD. Но с другой стороны, современные компьютеры, имеющие более 2 ГБ оперативной памяти, используют раздел подкачки очень редко. Заметным исключением являются системы, которые используют спящий режим. Следующая оптимизация для SSD уменьшает "swappiness" системы, чтобы избежать записей подкачки:<br />
<br />
# echo 1 > /proc/sys/vm/swappiness<br />
<br />
Или можно просто изменить файл {{ic|/etc/sysctl.conf}} как рекомендуется в вики-статье [[Maximizing_performance#Swappiness|Maximizing Performance]]:<br />
<br />
vm.swappiness=1<br />
vm.vfs_cache_pressure=50<br />
<br />
=== Очистка ячеек памяти SSD ===<br />
В некоторых случаях, пользователь может полностью сбросить ячейки SSD в состояние, подобное моменту покупки нового накопителя, такие образом добиться [http://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 заводской производительности]. Скорость записи уменьшается со временем даже с поддержкой TRIM. TRIM работает только с удалением файлов, но не с перемещением и инкрементальными сохранениями.<br />
<br />
Сброс ячеек легко выполнить за 3 шага, описанных в вики-статье [[SSD Memory Cell Clearing]].<br />
<br />
==Советы для уменьшения операций чтения/записи==<br />
Основной идеей долговечного использования SSD является перенос интенсивных операция ввода/вывода в оперативную память или HDD, в основном из-за большого размера блока очистки (512 КиБ в некоторых случаях).<br />
<br />
{{Note|32ГБ SSD с посредственным 10-кратным показателем write amplification, стандартными 10000 циклами чтения/записи и '''10ГБ записей в день''' дают '''8 лет жизни'''. Также, дольше живут диски с наибольшими объемами и современными контроллерами, которые имеют меньший показатель write amplification.}}<br />
<br />
Используйте команду {{ic|iotop -oPa}} и отсортируйте по количеству записей, чтобы увидеть сколько пишется на диск.<br />
<br />
=== Продуманная схема разделов ===<br />
Для старых и дешёвых SSD рекомендуется выносить раздел {{ic|/var}} за пределы физического диска, чтобы избежать множества операций чтения/записи. Для современных же накопителей хорошего качества лучше оставить {{ic|/var}} на SSD, т. к. это один из самых используемых подсистемой ввода/вывода разделов в Linux, таким образом увеличивается общая производительность системы. Arch монтирует {{ic|/tmp}} на {{ic|tmpfs}} с июля 2011. Это означает, что раздел находится в оперативной памяти вместо диска.<br />
<br />
Если SSD является единственным диском в системе, и нет возможности использовать совместно с HDD, разумно так же выделить отдельный раздел для {{ic|/var}}, чтобы в дальнейшем при возникновении ошибки было легче восстановить систему. Например, если программа использовала всё доступное пространство в {{ic|/}}, или какой-либо лог превысил все разумные размеры, и т. п..<br />
<br />
=== Опция монтирования noatime ===<br />
Монтируйте разделы SSD с опцией {{ic|noatime}}. См. раздел [[#Параметры монтирования|Параметры монтирования]].<br />
<br />
=== Расположите часто используемые файлы в оперативной памяти ===<br />
==== Профили браузеров ====<br />
Можно ''без труда'' монтировать профили браузеров, таких как chromium, firefox, opera, и т.д. в оперативную память через tmpfs и использовать rsync для синхронизации с копиями на диске. Таким образом можно так же заметно сократить количество операций чтения/записи.<br />
<br />
В AUR есть несколько пакетов для автоматизации этого, например {{AUR|profile-sync-daemon}}.<br />
<br />
==== Другие ====<br />
По этой же вышеописанной причине можно расположить в оперативной памяти раздел {{ic|/srv/http}} (если запущен web-сервер). Аналогом {{AUR|profile-sync-daemon}} здесь будет {{AUR|anything-sync-daemon}}, который позволяет определить '''любую''' директорию для синхронизации с оперативной памятью.<br />
<br />
{{Warning|НЕ пытайтесь добавлять /var/log в anything-sync-daemon. Systemd очень разозлится на это.}}<br />
<br />
=== Компиляция в tmpfs ===<br />
Интенсивная компиляция в {{ic|/tmp}} — отличная идея продления срока жизни диска. Если у вас имеется более 4ГБ оперативной памяти, строку tmp из {{ic|/etc/fstab}} нужно изменить, чтобы раздел использовал больше половины доступной памяти, через параметр {{ic|1=size=}}, т. к. {{ic|/tmp}} при компиляции растёт очень быстро.<br />
<br />
Пример для машины с 8ГБ оперативки:<br />
tmpfs /tmp tmpfs nodev,nosuid,size=7G 0 0<br />
<br />
=== Отключение журналирования ФС ===<br />
Использование журналируемых ФС типа ext3 или ext4 с ОТКЛЮЧЕННЫМ журналом на SSD тоже сократит количество записей на диск. Очевидным недостатком этого будет являться потеря данных при неудачном размонтировании (резкое отключение питания, блокировка ядра и т. д.). Однако, [http://tytso.livejournal.com/61830.html Ted Tso] выступает в защиту журналирования на современных SSD, т. к. по его тестам оно незначительно влияет на количество записей в большинстве случаев:<br />
<br />
'''Количество записанных данных (в мегабайтах) на ФС ext4 с параметром noatime.'''<br />
{| border="1" cellpadding="5"<br />
! операция !! с журналом !! без журнала !! разница<br />
|-<br />
!git clone<br />
|367.0<br />
|353.0<br />
|3.81 %<br />
|-<br />
!make<br />
|207.6<br />
|199.4<br />
|3.95 %<br />
|-<br />
!make clean<br />
|6.45<br />
|3.73<br />
|42.17 %<br />
|}<br />
<br />
''"Результаты показали, что записанный объём при работе с большим количеством мета-данных почти в 2 раза выше, чем реальный размер файлов. Это ожидаемо, т. к. все изменения в блоках мета-данных сначала пишутся в журнал, и транзакция журнала сбрасывается перед тем, как мета-данные будут записаны в конечное положение на диск. Однако же, для обычных задач, где данные пишутся сразу за мета-данными, разница в лишних операциях записи минимальна."''<br />
<br />
{{Note|Пример make clean из таблицы выше показывает важность переноса компиляции в tmpfs как рекомендовано в предыдущем разделе!}}<br />
<br />
=== Выбор файловой системы ===<br />
Существуют различные варианты выбора файловых систем, включая Ext2/3/4, Btrfs, и т. д.<br />
<br />
==== Btrfs ====<br />
Поддержка [http://en.wikipedia.org/wiki/Btrfs Btrfs] включена в ядро с версии 2.6.29. Некоторые считают, что она не является достаточно стабильной для повседневного использования, в то время как есть и явные сторонники этого потенциального преемника ext4. Рекомендуется прочитать статью [[Btrfs]] для дополнительной информации.<br />
<br />
==== Ext4 ====<br />
[http://en.wikipedia.org/wiki/Ext4 Ext4] — ещё одна файловая система, поддерживающая SSD. Считается стабильной и пригодной для повседневного использования с версии ядра 2.6.28. В отличие от Btrfs, ext4 не умеет автоматически определять тип диска; пользователи сами должны явно включить поддержку команды TRIM, используя параметр монтирования {{ic|discard}} в [[fstab]] (или командой {{ic|tune2fs -o discard /dev/sdaX}}).<br />
См. [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/filesystems/ext4.txt official in kernel tree documentation] для подробной информации об ext4.<br />
<br />
== Тестирования производительности SSD ==<br />
См. статью [[SSD Benchmarking]] для дополнительной информации о тестировании, либо просмотра результатов некоторых SSD.<br />
<br />
== Обновление прошивок ==<br />
=== OCZ ===<br />
Для дисков компании OCZ имеется утилита командной строки для Linux (i686 и x86_64) на их [http://www.ocztechnology.com/ssd_tools/ форуме].<br />
<br />
== См. также ==<br />
* [http://www.reddit.com/r/archlinux/comments/rkwjm/what_should_i_keep_in_mind_when_installing_on_ssd/ Discussion on Reddit about installing Arch on an SSD]</div>TrueBershttps://wiki.archlinux.org/index.php?title=%D0%A2%D0%B2%D0%B5%D1%80%D0%B4%D0%BE%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%BA%D0%BE%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D0%B8&diff=226351Твердотельные накопители2012-10-01T07:03:19Z<p>TrueBers: Remove misleading AHCI info</p>
<hr />
<div>[[Category:Storage (Русский)]]<br />
[[en:Solid State Drives]]<br />
[[it:Solid State Drives]]<br />
[[zh-CN:Solid State Drives]]<br />
{{Article summary start|Описание}}<br />
{{Article summary text|В этой статье рассматриваются многие аспекты твердотельных накопителей (Solid State Drives), поскольку они относятся к Linux; тем не менее, основные принципы и ключевые понятия, представленные в статье являются достаточно общими, чтобы быть применимыми к другим операционным системам, таким как Windows или Mac OS X. }}<br />
{{Article summary heading|Полезные ссылки}}<br />
{{Article summary wiki|SSD Benchmarking}}<br />
{{Article summary wiki|SSD Memory Cell Clearing}}<br />
{{Article summary end}}<br />
<br />
==Введение==<br />
Твердотельные накопители (SSD) не достаточно просто подключить чтобы они заработали должным образом. Необходимо учитывать некоторые специфичные вещи для достижения оптимальной производительности, такие как выравнивание разделов, выбор файловой системы, поддержка TRIM и т.д.. Статья пытается охватить общую информацию и ключевые понятия, чтобы позволить пользователям получить максимальную отдачу от твердотельных дисков под Linux. Рекомендуется прочесть статью полностью перед тем, как следовать рекомендациям.<br />
<br />
{{Note|Хотя статья и предназначена для пользователей Linux, большая часть информации может относиться также и к другим операционным системам, таким как BSD, Mac OS X или Windows.}}<br />
===Преимущества перед HDD===<br />
*Высокая скорость чтения. В 2-3 раза быстрее современных HDD (7200 об/мин на интерфейсе SATA2).<br />
*Устойчивая скорость чтения. Скорость чтения не уменьшается на протяжении всего объёма диска, тогда как производительность HDD падает при перемещении головок от края пластин к центру.<br />
*Минимальное время доступа. Приблизительно в 100 раз быстрее HDD. Например, 0,1 мс для SSD против 12-20 мс для HDD.<br />
*Высокая степень надежности.<br />
*Отсутствие движущихся частей.<br />
*Минимальный нагрев.<br />
*Минимальное потребление энергии. 1-2 Вт для SSD против 10-30 Вт для HDD (в зависимости от об/мин).<br />
*Легкие. Идеальное решение для ноутбуков.<br />
<br />
===Недостатки===<br />
*Цена за единицу объёма (десятки долларов за ГБ на SSD, тогда как стоимость ГБ для HDD измеряется копейками).<br />
*Ёмкость представленных моделей SSD намного ниже оной для HDD.<br />
*Большие ячейки памяти требуют различных оптимизаций файловых систем. Низкий уровень доступа скрыт за контроллером, в то время как современные ОС могли бы использовать низкий уровень для собственных оптимизаций.<br />
*Разделы и файловые системы требуют специальных оптимизаций. Размер страницы и размер стираемой страницы автоматически не определяется.<br />
*Ячейки изнашиваются. MLC-ячейки, произведённые по 50нм техпроцессу, могут выдерживать до 10 тысяч циклов записи; 35нм обычно выдерживают всего 5000 циклов, а 25нм — 3000 (чем меньше техпроцесс, тем больше плотность и ниже цена). Если участки записи распределены соответствующим образом, не слишком малы и верно выровнены, это увеличивает срок жизни ячеек пропорционально общему объёму.<br />
*Сложные прошивки и контроллеры. В них часто встречаются баги. Современные потребляют мощность, сравнимую с HDD. Они [https://lwn.net/Articles/353411/ реализуют] подобие журнально-структурированной файловой системы со сборкой мусора, переводят команды SATA, изначально предназначенные для HDD; некоторые реализуют сжатие на лету. Также контроллер распределяет циклы записи по всей области диска для предотвращения быстрого износа ячеек, объединяет несколько команд записи мелких данных в одну, опять же, для увеличения продолжительности жизни диска. Наконец, "мозги" твердотельных накопителей перемещают ячейки с данными по диску, чтобы те со временем не потеряли содержимое.<br />
*Может падать производительность в зависимости от заполненности диска. Не все производители реализовывают сборку мусора достаточно хорошо, поэтому фрагментированное свободное пространство не всегда объединяется в целые ячейки.<br />
<br />
==На что обращать внимание перед покупкой==<br />
Есть несколько ключевых особенностей, на которые стоит обратить внимание до покупки современных SSD.<br />
===Ключевые особенности===<br />
*Родная поддержка [http://en.wikipedia.org/wiki/TRIM TRIM]. Это жизненно необходимая функция для продления срока службы SSD и предотвращения уменьшения производительности операций записи от времени.<br />
*Также ключом является покупка SSD верного объема. Для эффективной работы разделы во всех файловых системах должны быть заполнены не более, чем на 75%.<br />
<br />
===Обзоры===<br />
Обзоры не такие уж полные, но основные ключевые особенности они освещают.<br />
*[http://www.anandtech.com/show/2738 SSD Anthology (history lesson, a bit dated)]<br />
*[http://www.anandtech.com/show/2829 SSD Relapse (refresher and more up to date])<br />
*[http://forums.anandtech.com/showthread.php?t=2069761 One user's recommendations]<br />
*[http://techgage.com/article/enabling_and_testing_ssd_trim_support_under_linux/ Enabling and Testing SSD TRIM Support Under Linux]<br />
<br />
==Советы по увеличению производительности SSD==<br />
===Параметры монтирования===<br />
Существует несколько ключевых параметров монтирования, используемых в {{ic|/etc/fstab}} для разделов на SSD.<br />
<br />
*'''noatime''' - Во время чтения файлов не будет обновляться поле atime файловой системы, указывающее время последнего доступа к файлу. Важность данного параметра в том, что он убирает необходимость системы производить "ненужные" операции записи когда файл всего-навсего необходимо прочитать. Т. к. эти операции записи могут быть достаточно интенсивными при чтении большого количества файлов, отключение может дать неплохой прирост производительности и срока жизни. Заметьте, что информация о времени последней записи файла будет по-прежнему обновляться каждый раз, когда файл будет изменён.<br />
*'''discard''' - Параметр discard включает команду TRIM для ядер версии 2.6.33 и выше. Не работает с файловой системой ext3; если всё же он включен на ext3, корневой раздел будет смонтирован только для чтения.<br />
<br />
/dev/sda1 / ext4 defaults,noatime,discard 0 1<br />
/dev/sda2 /home ext4 defaults,noatime,discard 0 1<br />
<br />
{{Warning|Пользователь должен убедиться ещё ДО попытки монтирования раздела с опцией {{ic|discard}}, что он работает на ядре версии 2.6.33 или выше, а также, что его SDD поддерживает TRIM. Иначе можно потерять данные!}}<br />
<br />
=== I/O планировщик ===<br />
Рассмотрим переход со стандартного [https://en.wikipedia.org/wiki/CFQ CFQ] планировщика (Completely Fair Queuing) начиная с ядра 2.6.18 к планировщикам [http://en.wikipedia.org/wiki/Noop_scheduler NOOP] или [http://en.wikipedia.org/wiki/Deadline_scheduler Deadline]. Последние два обеспечивают повышение производительности SSD. Планировщик NOOP, например, реализует простую очередь входящих запросов чтения/записи без их переупорядочивания или группировки. На SSD, в отличие от HDD, время доступа одинаково для всех секторов, поэтому изменение порядка запросов не имеет смысла.<br />
<br />
Больше информации о планировщиках смотрите здесь: [http://www.linux-mag.com/id/7564/1 Linux Magazine article], [http://www.phoronix.com/scan.php?page=article&item=linux_iosched_2012 Phoronix benchmark] и {{Bug|22605}}.<br />
<br />
Arch по умолчанию использует планировщик CFQ. Убедиться в этом можно, выведя содержимое файла {{ic|/sys/block/sdX/queue/scheduler}}:<br />
$ cat /sys/block/sdX/queue/scheduler<br />
noop deadline [cfq]<br />
Планировщик, используемый в данный момент, выделен квадратными скобками. <br />
<br />
===== Параметр ядра (в системе только SSD) =====<br />
Если в системе нет других типов накопителей кроме SSD, планировщик включается параметром ядра {{ic|1=elevator=noop}}. Для дополнительной информации смотрите [[Kernel parameters]].<br />
Дополнительно, для редко используемых жестких дисков может быть настроен на использование CFQ-планировщик, методом объясненным ниже.<br />
Укажите 'cfq' вместо 'noop' и HDD вместо SSD, соответственно.<br />
<br />
===== Использование виртуальной ФС sys (для разных типов накопителей) =====<br />
Этот метод используется, когда в системе установлено несколько физических накопителей разных типов (например, одновременно SSD и HDD).<br />
Добавьте следующую строку в {{ic|/etc/rc.local}}:<br />
echo noop > /sys/block/sdX/queue/scheduler<br />
где X — буква вашего SSD устройства.<br />
<br />
Из-за вероятности того, что udev может назначать дискам разные ноды {{ic|/dev/}} до и после обновления ядра, пользователь должен убедиться, что планировщик NOOP применился к нужному устройству во время загрузки. Один из способов заключается в использовании идентификатора диска, чтобы определить его {{ic|/dev/}} ноду. Чтобы этого добиться, используйте данный кусок кода вместо строки выше и добавьте его в {{ic|/etc/rc.local}}:<br />
declare -ar SSDS=(<br />
'scsi-SATA_SAMSUNG_SSD_PM8_S0NUNEAB861972'<br />
'ata-SAMSUNG_SSD_PM810_2.5__7mm_256GB_S0NUNEAB861972'<br />
)<br />
<br />
for SSD in "${SSDS[@]}" ; do<br />
BY_ID=/dev/disk/by-id/$SSD<br />
<br />
if &#91;&#91; -e $BY_ID ]] ; then<br />
DEV_NAME=`ls -l $BY_ID | awk '{ print $NF }' | sed -e 's/[/\.]//g'`<br />
SCHED=/sys/block/$DEV_NAME/queue/scheduler<br />
<br />
if &#91;&#91; -w $SCHED ]] ; then<br />
echo noop > $SCHED<br />
fi<br />
fi<br />
done<br />
где {{ic|SSDS}} — массив Bash, содержащий идентификаторы всех SSD-дисков. Идентификаторы перечислены в директории {{ic|/dev/disk/by-id/}} в виде символьных ссылок на соответствующие ноды в {{ic|/dev/}}. Чтобы увидеть ссылки и то, куда они указывают, выполните команду:<br />
ls -l /dev/disk/by-id/<br />
<br />
=====Использование udev как для одного накопителя, так и для нескольких разных=====<br />
Хотя вышеописанные методы будут работать без проблем, это также довольно надёжное решение. Следует также отметить, что с переходом на [[systemd]], файл rc.local больше не существует. Следовательно, было бы предпочтительнее использовать систему, которая отвечает за устройства, в первую очередь для реализации планировщика. В нашем случае это udev, и чтобы осуществить задуманное, всё что нам нужно — простое [[udev]]-правило.<br />
<br />
Создайте файл в директории /etc/udev/rules.d с именем, например, '60-schedulers.rules'. Запишите в него следующие строки:<br />
# установка планировщика deadline для SSD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"<br />
<br />
# установка планировщика cfq для HDD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"<br />
Конечно же вы можете заменить deadline/cfq любыми другими планировщиками. Изменения вступают в силу после перезагрузки. Чтобы проверить успешность срабатывания правила, выполните команду<br />
$ cat /sys/block/sdX/queue/scheduler #где X — буква физического накопителя<br />
{{note|Имейте в виду, CFQ является планировщиком по умолчанию, так что второе правило на самом деле не нужно, если вы пользуетесь стандартным ядром. Также в примере имя правила начинается с числа 60, т. к. это число udev использует для своих строгих правил именования. Блочные устройства в этом диапазоне чисел могут модифицироваться, и это безопасная позиция для данного правила. Однако, правило может называться как угодно, при этом оканчиваться на '.rules'. (Источник: falconindy и w0ng на своём блоге)}}<br />
<br />
=== Разделы подкачки на SSD ===<br />
Можно размещать раздел подкачки на SSD. Но с другой стороны, современные компьютеры, имеющие более 2 ГБ оперативной памяти, используют раздел подкачки очень редко. Заметным исключением являются системы, которые используют спящий режим. Следующая оптимизация для SSD уменьшает "swappiness" системы, чтобы избежать записей подкачки:<br />
<br />
# echo 1 > /proc/sys/vm/swappiness<br />
<br />
Или можно просто изменить файл {{ic|/etc/sysctl.conf}} как рекомендуется в вики-статье [[Maximizing_performance#Swappiness|Maximizing Performance]]:<br />
<br />
vm.swappiness=1<br />
vm.vfs_cache_pressure=50<br />
<br />
=== Очистка ячеек памяти SSD ===<br />
В некоторых случаях, пользователь может полностью сбросить ячейки SSD в состояние, подобное моменту покупки нового накопителя, такие образом добиться [http://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 заводской производительности]. Скорость записи уменьшается со временем даже с поддержкой TRIM. TRIM работает только с удалением файлов, но не с перемещением и инкрементальными сохранениями.<br />
<br />
Сброс ячеек легко выполнить за 3 шага, описанных в вики-статье [[SSD Memory Cell Clearing]].<br />
<br />
==Советы для уменьшения операций чтения/записи==<br />
Основной идеей долговечного использования SSD является перенос интенсивных операция ввода/вывода в оперативную память или HDD, в основном из-за большого размера блока очистки (512 КиБ в некоторых случаях).<br />
<br />
{{Note|32ГБ SSD с посредственным 10-кратным показателем write amplification, стандартными 10000 циклами чтения/записи и '''10ГБ записей в день''' дают '''8 лет жизни'''. Также, дольше живут диски с наибольшими объемами и современными контроллерами, которые имеют меньший показатель write amplification.}}<br />
<br />
Используйте команду {{ic|iotop -oPa}} и отсортируйте по количеству записей, чтобы увидеть сколько пишется на диск.<br />
<br />
=== Продуманная схема разделов ===<br />
Для старых и дешёвых SSD рекомендуется выносить раздел {{ic|/var}} за пределы физического диска, чтобы избежать множества операций чтения/записи. Для современных же накопителей хорошего качества лучше оставить {{ic|/var}} на SSD, т. к. это один из самых используемых подсистемой ввода/вывода разделов в Linux, таким образом увеличивается общая производительность системы. Arch монтирует {{ic|/tmp}} на {{ic|tmpfs}} с июля 2011. Это означает, что раздел находится в оперативной памяти вместо диска.<br />
<br />
Если SSD является единственным диском в системе, и нет возможности использовать совместно с HDD, разумно так же выделить отдельный раздел для {{ic|/var}}, чтобы в дальнейшем при возникновении ошибки было легче восстановить систему. Например, если программа использовала всё доступное пространство в {{ic|/}}, или какой-либо лог превысил все разумные размеры, и т. п..<br />
<br />
=== Опция монтирования noatime ===<br />
Монтируйте разделы SSD с опцией {{ic|noatime}}. См. раздел [[#Параметры монтирования|Параметры монтирования]].<br />
<br />
=== Расположите часто используемые файлы в оперативной памяти ===<br />
==== Профили браузеров ====<br />
Можно ''без труда'' монтировать профили браузеров, таких как chromium, firefox, opera, и т.д. в оперативную память через tmpfs и использовать rsync для синхронизации с копиями на диске. Таким образом можно так же заметно сократить количество операций чтения/записи.<br />
<br />
В AUR есть несколько пакетов для автоматизации этого, например {{AUR|profile-sync-daemon}}.<br />
<br />
==== Другие ====<br />
По этой же вышеописанной причине можно расположить в оперативной памяти раздел {{ic|/srv/http}} (если запущен web-сервер). Аналогом {{AUR|profile-sync-daemon}} здесь будет {{AUR|anything-sync-daemon}}, который позволяет определить '''любую''' директорию для синхронизации с оперативной памятью.<br />
<br />
{{Warning|НЕ пытайтесь добавлять /var/log в anything-sync-daemon. Systemd очень разозлится на это.}}<br />
<br />
=== Компиляция в tmpfs ===<br />
Интенсивная компиляция в {{ic|/tmp}} — отличная идея продления срока жизни диска. Если у вас имеется более 4ГБ оперативной памяти, строку tmp из {{ic|/etc/fstab}} нужно изменить, чтобы раздел использовал больше половины доступной памяти, через параметр {{ic|1=size=}}, т. к. {{ic|/tmp}} при компиляции растёт очень быстро.<br />
<br />
Пример для машины с 8ГБ оперативки:<br />
tmpfs /tmp tmpfs nodev,nosuid,size=7G 0 0<br />
<br />
=== Отключение журналирования ФС ===<br />
Использование журналируемых ФС типа ext3 или ext4 с ОТКЛЮЧЕННЫМ журналом на SSD тоже сократит количество записей на диск. Очевидным недостатком этого будет являться потеря данных при неудачном размонтировании (резкое отключение питания, блокировка ядра и т. д.). Однако, [http://tytso.livejournal.com/61830.html Ted Tso] выступает в защиту журналирования на современных SSD, т. к. по его тестам оно незначительно влияет на количество записей в большинстве случаев:<br />
<br />
'''Количество записанных данных (в мегабайтах) на ФС ext4 с параметром noatime.'''<br />
{| border="1" cellpadding="5"<br />
! операция !! с журналом !! без журнала !! разница<br />
|-<br />
!git clone<br />
|367.0<br />
|353.0<br />
|3.81 %<br />
|-<br />
!make<br />
|207.6<br />
|199.4<br />
|3.95 %<br />
|-<br />
!make clean<br />
|6.45<br />
|3.73<br />
|42.17 %<br />
|}<br />
<br />
''"Результаты показали, что записанный объём при работе с большим количеством мета-данных почти в 2 раза выше, чем реальный размер файлов. Это ожидаемо, т. к. все изменения в блоках мета-данных сначала пишутся в журнал, и транзакция журнала сбрасывается перед тем, как мета-данные будут записаны в конечное положение на диск. Однако же, для обычных задач, где данные пишутся сразу за мета-данными, разница в лишних операциях записи минимальна."''<br />
<br />
{{Note|Пример make clean из таблицы выше показывает важность переноса компиляции в tmpfs как рекомендовано в предыдущем разделе!}}<br />
<br />
=== Выбор файловой системы ===<br />
Существуют различные варианты выбора файловых систем, включая Ext2/3/4, Btrfs, и т. д.<br />
<br />
==== Btrfs ====<br />
Поддержка [http://en.wikipedia.org/wiki/Btrfs Btrfs] включена в ядро с версии 2.6.29. Некоторые считают, что она не является достаточно стабильной для повседневного использования, в то время как есть и явные сторонники этого потенциального преемника ext4. Рекомендуется прочитать статью [[Btrfs]] для дополнительной информации.<br />
<br />
==== Ext4 ====<br />
[http://en.wikipedia.org/wiki/Ext4 Ext4] — ещё одна файловая система, поддерживающая SSD. Считается стабильной и пригодной для повседневного использования с версии ядра 2.6.28. В отличие от Btrfs, ext4 не умеет автоматически определять тип диска; пользователи сами должны явно включить поддержку команды TRIM, используя параметр монтирования {{ic|discard}} в [[fstab]] (или командой {{ic|tune2fs -o discard /dev/sdaX}}).<br />
См. [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/filesystems/ext4.txt official in kernel tree documentation] для подробной информации об ext4.<br />
<br />
== Тестирования производительности SSD ==<br />
См. статью [[SSD Benchmarking]] для дополнительной информации о тестировании, либо просмотра результатов некоторых SSD.<br />
<br />
== Обновление прошивок ==<br />
=== OCZ ===<br />
Для дисков компании OCZ имеется утилита командной строки для Linux (i686 и x86_64) на их [http://www.ocztechnology.com/ssd_tools/ форуме].<br />
<br />
== См. также ==<br />
* [http://www.reddit.com/r/archlinux/comments/rkwjm/what_should_i_keep_in_mind_when_installing_on_ssd/ Discussion on Reddit about installing Arch on an SSD]</div>TrueBershttps://wiki.archlinux.org/index.php?title=%D0%A2%D0%B2%D0%B5%D1%80%D0%B4%D0%BE%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%BA%D0%BE%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D0%B8&diff=224214Твердотельные накопители2012-09-21T03:04:51Z<p>TrueBers: </p>
<hr />
<div>[[Category:Storage (Русский)]]<br />
[[en:Solid State Drives]]<br />
[[it:Solid State Drives]]<br />
[[zh-CN:Solid State Drives]]<br />
{{Article summary start|Описание}}<br />
{{Article summary text|В этой статье рассматриваются многие аспекты твердотельных накопителей (Solid State Drives), поскольку они относятся к Linux; тем не менее, основные принципы и ключевые понятия, представленные в статье являются достаточно общими, чтобы быть применимыми к другим операционным системам, таким как Windows или Mac OS X. }}<br />
{{Article summary heading|Полезные ссылки}}<br />
{{Article summary wiki|SSD Benchmarking}}<br />
{{Article summary wiki|SSD Memory Cell Clearing}}<br />
{{Article summary end}}<br />
<br />
==Введение==<br />
Твердотельные накопители (SSD) не достаточно просто подключить чтобы они заработали должным образом. Необходимо учитывать некоторые специфичные вещи для достижения оптимальной производительности, такие как выравнивание разделов, выбор файловой системы, поддержка TRIM и т.д.. Статья пытается охватить общую информацию и ключевые понятия, чтобы позволить пользователям получить максимальную отдачу от твердотельных дисков под Linux. Рекомендуется прочесть статью полностью перед тем, как следовать рекомендациям.<br />
<br />
{{Note|Хотя статья и предназначена для пользователей Linux, большая часть информации может относиться также и к другим операционным системам, таким как BSD, Mac OS X или Windows.}}<br />
===Преимущества перед HDD===<br />
*Высокая скорость чтения. В 2-3 раза быстрее современных HDD (7200 об/мин на интерфейсе SATA2).<br />
*Устойчивая скорость чтения. Скорость чтения не уменьшается на протяжении всего объёма диска, тогда как производительность HDD падает при перемещении головок от края пластин к центру.<br />
*Минимальное время доступа. Приблизительно в 100 раз быстрее HDD. Например, 0,1 мс для SSD против 12-20 мс для HDD.<br />
*Высокая степень надежности.<br />
*Отсутствие движущихся частей.<br />
*Минимальный нагрев.<br />
*Минимальное потребление энергии. 1-2 Вт для SSD против 10-30 Вт для HDD (в зависимости от об/мин).<br />
*Легкие. Идеальное решение для ноутбуков.<br />
<br />
===Недостатки===<br />
*Цена за единицу объёма (десятки долларов за ГБ на SSD, тогда как стоимость ГБ для HDD измеряется копейками).<br />
*Ёмкость представленных моделей SSD намного ниже оной для HDD.<br />
*Большие ячейки памяти требуют различных оптимизаций файловых систем. Низкий уровень доступа скрыт за контроллером, в то время как современные ОС могли бы использовать низкий уровень для собственных оптимизаций.<br />
*Разделы и файловые системы требуют специальных оптимизаций. Размер страницы и размер стираемой страницы автоматически не определяется.<br />
*Ячейки изнашиваются. MLC-ячейки, произведённые по 50нм техпроцессу, могут выдерживать до 10 тысяч циклов записи; 35нм обычно выдерживают всего 5000 циклов, а 25нм — 3000 (чем меньше техпроцесс, тем больше плотность и ниже цена). Если участки записи распределены соответствующим образом, не слишком малы и верно выровнены, это увеличивает срок жизни ячеек пропорционально общему объёму.<br />
*Сложные прошивки и контроллеры. В них часто встречаются баги. Современные потребляют мощность, сравнимую с HDD. Они [https://lwn.net/Articles/353411/ реализуют] подобие журнально-структурированной файловой системы со сборкой мусора, переводят команды SATA, изначально предназначенные для HDD; некоторые реализуют сжатие на лету. Также контроллер распределяет циклы записи по всей области диска для предотвращения быстрого износа ячеек, объединяет несколько команд записи мелких данных в одну, опять же, для увеличения продолжительности жизни диска. Наконец, "мозги" твердотельных накопителей перемещают ячейки с данными по диску, чтобы те со временем не потеряли содержимое.<br />
*Может падать производительность в зависимости от заполненности диска. Не все производители реализовывают сборку мусора достаточно хорошо, поэтому фрагментированное свободное пространство не всегда объединяется в целые ячейки.<br />
<br />
==На что обращать внимание перед покупкой==<br />
Есть несколько ключевых особенностей, на которые стоит обратить внимание до покупки современных SSD.<br />
===Ключевые особенности===<br />
*Родная поддержка [http://en.wikipedia.org/wiki/TRIM TRIM]. Это жизненно необходимая функция для продления срока службы SSD и предотвращения уменьшения производительности операций записи от времени.<br />
*Также ключом является покупка SSD верного объема. Для эффективной работы разделы во всех файловых системах должны быть заполнены не более, чем на 75%.<br />
<br />
===Обзоры===<br />
Обзоры не такие уж полные, но основные ключевые особенности они освещают.<br />
*[http://www.anandtech.com/show/2738 SSD Anthology (history lesson, a bit dated)]<br />
*[http://www.anandtech.com/show/2829 SSD Relapse (refresher and more up to date])<br />
*[http://forums.anandtech.com/showthread.php?t=2069761 One user's recommendations]<br />
*[http://techgage.com/article/enabling_and_testing_ssd_trim_support_under_linux/ Enabling and Testing SSD TRIM Support Under Linux]<br />
<br />
==Советы по увеличению производительности SSD==<br />
===Параметры монтирования===<br />
Существует несколько ключевых параметров монтирования, используемых в {{ic|/etc/fstab}} для разделов на SSD.<br />
<br />
*'''noatime''' - Во время чтения файлов не будет обновляться поле atime файловой системы, указывающее время последнего доступа к файлу. Важность данного параметра в том, что он убирает необходимость системы производить "ненужные" операции записи когда файл всего-навсего необходимо прочитать. Т. к. эти операции записи могут быть достаточно интенсивными при чтении большого количества файлов, отключение может дать неплохой прирост производительности и срока жизни. Заметьте, что информация о времени последней записи файла будет по-прежнему обновляться каждый раз, когда файл будет изменён.<br />
*'''discard''' - Параметр discard включает команду TRIM для ядер версии 2.6.33 и выше. Не работает с файловой системой ext3; если всё же он включен на ext3, корневой раздел будет смонтирован только для чтения.<br />
<br />
/dev/sda1 / ext4 defaults,noatime,discard 0 1<br />
/dev/sda2 /home ext4 defaults,noatime,discard 0 1<br />
<br />
{{Warning|Критически важно перевести контроллер материнской платы в режим [[AHCI]] (не IDE!). Только в этом режиме ядро может работать с командой TRIM.}} <br />
{{Warning|Пользователь должен убедиться ещё ДО попытки монтирования раздела с опцией {{ic|discard}}, что он работает на ядре версии 2.6.33 или выше, а также, что его SDD поддерживает TRIM. Иначе можно потерять данные!}}<br />
<br />
====Специальные условия для компьютеров Mac====<br />
<br />
По умолчанию прошивка Apple переключает SATA диски в режим IDE (не AHCI), когда загружает любую другую ОС помимо Mac OS. Легко можно вернуть обратно режим AHCI используя [[GRUB]] с Intel SATA контроллером.<br />
<br />
Для начала определите PCI идентификатор SATA контроллера:<br />
# lspci -nn<br />
найдите строку с {{ic|SATA AHCI Controller}}. PCI идентификатор находится в квадратных скобках и должен выглядеть примерно так: 8086:27c4 (последние цифры могут быть другими).<br />
<br />
Теперь отредактируйте {{ic|/boot/grub/grub.cfg}} и добавьте {{ic|1=setpci -d 8086:27c4 90.b=40}} сразу перед строкой {{ic|set root}} для каждой ОС, в которой необходимо включить режим AHCI. Не забудьте заменить PCI идентификатор на свой.<br />
<br />
(источник: http://darkfader.blogspot.com/2010/04/windows-on-intel-mac-and-ahci-mode.html)<br />
<br />
Если у вас Macbook Unibody конца 2008 года (5.1), на нём стоит {{ic|nVidia Corporation MCP79 SATA Controller}}. Добавьте строку {{ic|1=setpci -d 10de:0ab5 9c.b=06}} в файл {{ic|/boot/grub/grub.cfg}}.<br />
<br />
=== I/O планировщик ===<br />
Рассмотрим переход со стандартного [https://en.wikipedia.org/wiki/CFQ CFQ] планировщика (Completely Fair Queuing) начиная с ядра 2.6.18 к планировщикам [http://en.wikipedia.org/wiki/Noop_scheduler NOOP] или [http://en.wikipedia.org/wiki/Deadline_scheduler Deadline]. Последние два обеспечивают повышение производительности SSD. Планировщик NOOP, например, реализует простую очередь входящих запросов чтения/записи без их переупорядочивания или группировки. На SSD, в отличие от HDD, время доступа одинаково для всех секторов, поэтому изменение порядка запросов не имеет смысла.<br />
<br />
Больше информации о планировщиках смотрите здесь: [http://www.linux-mag.com/id/7564/1 Linux Magazine article], [http://www.phoronix.com/scan.php?page=article&item=linux_iosched_2012 Phoronix benchmark] и {{Bug|22605}}.<br />
<br />
Arch по умолчанию использует планировщик CFQ. Убедиться в этом можно, выведя содержимое файла {{ic|/sys/block/sdX/queue/scheduler}}:<br />
$ cat /sys/block/sdX/queue/scheduler<br />
noop deadline [cfq]<br />
Планировщик, используемый в данный момент, выделен квадратными скобками. <br />
<br />
===== Параметр ядра (в системе только SSD) =====<br />
Если в системе нет других типов накопителей кроме SSD, планировщик включается параметром ядра {{ic|1=elevator=noop}}. Для дополнительной информации смотрите [[Kernel parameters]].<br />
Дополнительно, для редко используемых жестких дисков может быть настроен на использование CFQ-планировщик, методом объясненным ниже.<br />
Укажите 'cfq' вместо 'noop' и HDD вместо SSD, соответственно.<br />
<br />
===== Использование виртуальной ФС sys (для разных типов накопителей) =====<br />
Этот метод используется, когда в системе установлено несколько физических накопителей разных типов (например, одновременно SSD и HDD).<br />
Добавьте следующую строку в {{ic|/etc/rc.local}}:<br />
echo noop > /sys/block/sdX/queue/scheduler<br />
где X — буква вашего SSD устройства.<br />
<br />
Из-за вероятности того, что udev может назначать дискам разные ноды {{ic|/dev/}} до и после обновления ядра, пользователь должен убедиться, что планировщик NOOP применился к нужному устройству во время загрузки. Один из способов заключается в использовании идентификатора диска, чтобы определить его {{ic|/dev/}} ноду. Чтобы этого добиться, используйте данный кусок кода вместо строки выше и добавьте его в {{ic|/etc/rc.local}}:<br />
declare -ar SSDS=(<br />
'scsi-SATA_SAMSUNG_SSD_PM8_S0NUNEAB861972'<br />
'ata-SAMSUNG_SSD_PM810_2.5__7mm_256GB_S0NUNEAB861972'<br />
)<br />
<br />
for SSD in "${SSDS[@]}" ; do<br />
BY_ID=/dev/disk/by-id/$SSD<br />
<br />
if &#91;&#91; -e $BY_ID ]] ; then<br />
DEV_NAME=`ls -l $BY_ID | awk '{ print $NF }' | sed -e 's/[/\.]//g'`<br />
SCHED=/sys/block/$DEV_NAME/queue/scheduler<br />
<br />
if &#91;&#91; -w $SCHED ]] ; then<br />
echo noop > $SCHED<br />
fi<br />
fi<br />
done<br />
где {{ic|SSDS}} — массив Bash, содержащий идентификаторы всех SSD-дисков. Идентификаторы перечислены в директории {{ic|/dev/disk/by-id/}} в виде символьных ссылок на соответствующие ноды в {{ic|/dev/}}. Чтобы увидеть ссылки и то, куда они указывают, выполните команду:<br />
ls -l /dev/disk/by-id/<br />
<br />
=====Использование udev как для одного накопителя, так и для нескольких разных=====<br />
Хотя вышеописанные методы будут работать без проблем, это также довольно надёжное решение. Следует также отметить, что с переходом на [[systemd]], файл rc.local больше не существует. Следовательно, было бы предпочтительнее использовать систему, которая отвечает за устройства, в первую очередь для реализации планировщика. В нашем случае это udev, и чтобы осуществить задуманное, всё что нам нужно — простое [[udev]]-правило.<br />
<br />
Создайте файл в директории /etc/udev/rules.d с именем, например, '60-schedulers.rules'. Запишите в него следующие строки:<br />
# установка планировщика deadline для SSD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"<br />
<br />
# установка планировщика cfq для HDD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"<br />
Конечно же вы можете заменить deadline/cfq любыми другими планировщиками. Изменения вступают в силу после перезагрузки. Чтобы проверить успешность срабатывания правила, выполните команду<br />
$ cat /sys/block/sdX/queue/scheduler #где X — буква физического накопителя<br />
{{note|Имейте в виду, CFQ является планировщиком по умолчанию, так что второе правило на самом деле не нужно, если вы пользуетесь стандартным ядром. Также в примере имя правила начинается с числа 60, т. к. это число udev использует для своих строгих правил именования. Блочные устройства в этом диапазоне чисел могут модифицироваться, и это безопасная позиция для данного правила. Однако, правило может называться как угодно, при этом оканчиваться на '.rules'. (Источник: falconindy и w0ng на своём блоге)}}<br />
<br />
=== Разделы подкачки на SSD ===<br />
Можно размещать раздел подкачки на SSD. Но с другой стороны, современные компьютеры, имеющие более 2 ГБ оперативной памяти, используют раздел подкачки очень редко. Заметным исключением являются системы, которые используют спящий режим. Следующая оптимизация для SSD уменьшает "swappiness" системы, чтобы избежать записей подкачки:<br />
<br />
# echo 1 > /proc/sys/vm/swappiness<br />
<br />
Или можно просто изменить файл {{ic|/etc/sysctl.conf}} как рекомендуется в вики-статье [[Maximizing_performance#Swappiness|Maximizing Performance]]:<br />
<br />
vm.swappiness=1<br />
vm.vfs_cache_pressure=50<br />
<br />
=== Очистка ячеек памяти SSD ===<br />
В некоторых случаях, пользователь может полностью сбросить ячейки SSD в состояние, подобное моменту покупки нового накопителя, такие образом добиться [http://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 заводской производительности]. Скорость записи уменьшается со временем даже с поддержкой TRIM. TRIM работает только с удалением файлов, но не с перемещением и инкрементальными сохранениями.<br />
<br />
Сброс ячеек легко выполнить за 3 шага, описанных в вики-статье [[SSD Memory Cell Clearing]].<br />
<br />
==Советы для уменьшения операций чтения/записи==<br />
Основной идеей долговечного использования SSD является перенос интенсивных операция ввода/вывода в оперативную память или HDD, в основном из-за большого размера блока очистки (512 КиБ в некоторых случаях).<br />
<br />
{{Note|32ГБ SSD с посредственным 10-кратным показателем write amplification, стандартными 10000 циклами чтения/записи и '''10ГБ записей в день''' дают '''8 лет жизни'''. Также, дольше живут диски с наибольшими объемами и современными контроллерами, которые имеют меньший показатель write amplification.}}<br />
<br />
Используйте команду {{ic|iotop -oPa}} и отсортируйте по количеству записей, чтобы увидеть сколько пишется на диск.<br />
<br />
=== Продуманная схема разделов ===<br />
Для старых и дешёвых SSD рекомендуется выносить раздел {{ic|/var}} за пределы физического диска, чтобы избежать множества операций чтения/записи. Для современных же накопителей хорошего качества лучше оставить {{ic|/var}} на SSD, т. к. это один из самых используемых подсистемой ввода/вывода разделов в Linux, таким образом увеличивается общая производительность системы. Arch монтирует {{ic|/tmp}} на {{ic|tmpfs}} с июля 2011. Это означает, что раздел находится в оперативной памяти вместо диска.<br />
<br />
Если SSD является единственным диском в системе, и нет возможности использовать совместно с HDD, разумно так же выделить отдельный раздел для {{ic|/var}}, чтобы в дальнейшем при возникновении ошибки было легче восстановить систему. Например, если программа использовала всё доступное пространство в {{ic|/}}, или какой-либо лог превысил все разумные размеры, и т. п..<br />
<br />
=== Опция монтирования noatime ===<br />
Монтируйте разделы SSD с опцией {{ic|noatime}}. См. раздел [[#Параметры монтирования|Параметры монтирования]].<br />
<br />
=== Расположите часто используемые файлы в оперативной памяти ===<br />
==== Профили браузеров ====<br />
Можно ''без труда'' монтировать профили браузеров, таких как chromium, firefox, opera, и т.д. в оперативную память через tmpfs и использовать rsync для синхронизации с копиями на диске. Таким образом можно так же заметно сократить количество операций чтения/записи.<br />
<br />
В AUR есть несколько пакетов для автоматизации этого, например {{AUR|profile-sync-daemon}}.<br />
<br />
==== Другие ====<br />
По этой же вышеописанной причине можно расположить в оперативной памяти раздел {{ic|/srv/http}} (если запущен web-сервер). Аналогом {{AUR|profile-sync-daemon}} здесь будет {{AUR|anything-sync-daemon}}, который позволяет определить '''любую''' директорию для синхронизации с оперативной памятью.<br />
<br />
{{Warning|НЕ пытайтесь добавлять /var/log в anything-sync-daemon. Systemd очень разозлится на это.}}<br />
<br />
=== Компиляция в tmpfs ===<br />
Интенсивная компиляция в {{ic|/tmp}} — отличная идея продления срока жизни диска. Если у вас имеется более 4ГБ оперативной памяти, строку tmp из {{ic|/etc/fstab}} нужно изменить, чтобы раздел использовал больше половины доступной памяти, через параметр {{ic|1=size=}}, т. к. {{ic|/tmp}} при компиляции растёт очень быстро.<br />
<br />
Пример для машины с 8ГБ оперативки:<br />
tmpfs /tmp tmpfs nodev,nosuid,size=7G 0 0<br />
<br />
=== Отключение журналирования ФС ===<br />
Использование журналируемых ФС типа ext3 или ext4 с ОТКЛЮЧЕННЫМ журналом на SSD тоже сократит количество записей на диск. Очевидным недостатком этого будет являться потеря данных при неудачном размонтировании (резкое отключение питания, блокировка ядра и т. д.). Однако, [http://tytso.livejournal.com/61830.html Ted Tso] выступает в защиту журналирования на современных SSD, т. к. по его тестам оно незначительно влияет на количество записей в большинстве случаев:<br />
<br />
'''Количество записанных данных (в мегабайтах) на ФС ext4 с параметром noatime.'''<br />
{| border="1" cellpadding="5"<br />
! операция !! с журналом !! без журнала !! разница<br />
|-<br />
!git clone<br />
|367.0<br />
|353.0<br />
|3.81 %<br />
|-<br />
!make<br />
|207.6<br />
|199.4<br />
|3.95 %<br />
|-<br />
!make clean<br />
|6.45<br />
|3.73<br />
|42.17 %<br />
|}<br />
<br />
''"Результаты показали, что записанный объём при работе с большим количеством мета-данных почти в 2 раза выше, чем реальный размер файлов. Это ожидаемо, т. к. все изменения в блоках мета-данных сначала пишутся в журнал, и транзакция журнала сбрасывается перед тем, как мета-данные будут записаны в конечное положение на диск. Однако же, для обычных задач, где данные пишутся сразу за мета-данными, разница в лишних операциях записи минимальна."''<br />
<br />
{{Note|Пример make clean из таблицы выше показывает важность переноса компиляции в tmpfs как рекомендовано в предыдущем разделе!}}<br />
<br />
=== Выбор файловой системы ===<br />
Существуют различные варианты выбора файловых систем, включая Ext2/3/4, Btrfs, и т. д.<br />
<br />
==== Btrfs ====<br />
Поддержка [http://en.wikipedia.org/wiki/Btrfs Btrfs] включена в ядро с версии 2.6.29. Некоторые считают, что она не является достаточно стабильной для повседневного использования, в то время как есть и явные сторонники этого потенциального преемника ext4. Рекомендуется прочитать статью [[Btrfs]] для дополнительной информации.<br />
<br />
==== Ext4 ====<br />
[http://en.wikipedia.org/wiki/Ext4 Ext4] — ещё одна файловая система, поддерживающая SSD. Считается стабильной и пригодной для повседневного использования с версии ядра 2.6.28. В отличие от Btrfs, ext4 не умеет автоматически определять тип диска; пользователи сами должны явно включить поддержку команды TRIM, используя параметр монтирования {{ic|discard}} в [[fstab]] (или командой {{ic|tune2fs -o discard /dev/sdaX}}).<br />
См. [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/filesystems/ext4.txt official in kernel tree documentation] для подробной информации об ext4.<br />
<br />
== Тестирования производительности SSD ==<br />
См. статью [[SSD Benchmarking]] для дополнительной информации о тестировании, либо просмотра результатов некоторых SSD.<br />
<br />
== Обновление прошивок ==<br />
=== OCZ ===<br />
Для дисков компании OCZ имеется утилита командной строки для Linux (i686 и x86_64) на их [http://www.ocztechnology.com/ssd_tools/ форуме].<br />
<br />
== См. также ==<br />
* [http://www.reddit.com/r/archlinux/comments/rkwjm/what_should_i_keep_in_mind_when_installing_on_ssd/ Discussion on Reddit about installing Arch on an SSD]</div>TrueBershttps://wiki.archlinux.org/index.php?title=%D0%A2%D0%B2%D0%B5%D1%80%D0%B4%D0%BE%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%BA%D0%BE%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D0%B8&diff=224213Твердотельные накопители2012-09-21T03:00:16Z<p>TrueBers: Created page with "Category:Storage (Русский) en:Solid State Drives it:Solid State Drives zh-CN:Solid State Drives {{Article summary start|Описание}} {{Article sum..."</p>
<hr />
<div>[[Category:Storage (Русский)]]<br />
[[en:Solid State Drives]]<br />
[[it:Solid State Drives]]<br />
[[zh-CN:Solid State Drives]]<br />
{{Article summary start|Описание}}<br />
{{Article summary text|В этой статье рассматриваются многие аспекты твердотельных накопителей (Solid State Drives), поскольку они относятся к Linux; тем не менее, основные принципы и ключевые понятия, представленные в статье являются достаточно общими, чтобы быть применимыми к другим операционным системам, таким как Windows или Mac OS X. }}<br />
{{Article summary heading|Полезные ссылки}}<br />
{{Article summary wiki|SSD Benchmarking}}<br />
{{Article summary wiki|SSD Memory Cell Clearing}}<br />
{{Article summary end}}<br />
<br />
==Введение==<br />
Твердотельные накопители (SSD) не достаточно просто подключить чтобы они заработали должным образом. Необходимо учитывать некоторые специфичные вещи для достижения оптимальной производительности, такие как выравнивание разделов, выбор файловой системы, поддержка TRIM и т.д.. Статья пытается охватить общую информацию и ключевые понятия, чтобы позволить пользователям получить максимальную отдачу от твердотельных дисков под Linux. Рекомендуется прочесть статью полностью перед тем, как следовать рекомендациям.<br />
<br />
{{Note|Хотя статья и предназначена для пользователей Linux, большая часть информации может относиться также и к другим операционным системам, таким как BSD, Mac OS X или Windows.}}<br />
===Преимущества перед HDD===<br />
*Высокая скорость чтения. В 2-3 раза быстрее современных HDD (7200 об/мин на интерфейсе SATA2).<br />
*Устойчивая скорость чтения. Скорость чтения не уменьшается на протяжении всего объёма диска, тогда как производительность HDD падает при перемещении головок от края пластин к центру.<br />
*Минимальное время доступа. Приблизительно в 100 раз быстрее HDD. Например, 0,1 мс для SSD против 12-20 мс для HDD.<br />
*Высокая степень надежности.<br />
*Отсутствие движущихся частей.<br />
*Минимальный нагрев.<br />
*Минимальное потребление энергии. 1-2 Вт для SSD против 10-30 Вт для HDD (в зависимости от об/мин).<br />
*Легкие. Идеальное решение для ноутбуков.<br />
<br />
===Недостатки===<br />
*Цена за единицу объёма (десятки долларов за ГБ на SSD, тогда как стоимость ГБ для HDD измеряется копейками).<br />
*Ёмкость представленных моделей SSD намного ниже оной для HDD.<br />
*Большие ячейки памяти требуют различных оптимизаций файловых систем. Низкий уровень доступа скрыт за контроллером, в то время как современные ОС могли бы использовать низкий уровень для собственных оптимизаций.<br />
*Разделы и файловые системы требуют специальных оптимизаций. Размер страницы и размер стираемой страницы автоматически не определяется.<br />
*Ячейки изнашиваются. MLC-ячейки, произведённые по 50нм техпроцессу, могут выдерживать до 10 тысяч циклов записи; 35нм обычно выдерживают всего 5000 циклов, а 25нм — 3000 (чем меньше техпроцесс, тем больше плотность и ниже цена). Если участки записи распределены соответствующим образом, не слишком малы и верно выровнены, это увеличивает срок жизни ячеек пропорционально общему объёму.<br />
*Сложные прошивки и контроллеры. В них часто встречаются баги. Современные потребляют мощность, сравнимую с HDD. Они [https://lwn.net/Articles/353411/ реализуют] подобие журнально-структурированной файловой системы со сборкой мусора, переводят команды SATA, изначально предназначенные для HDD; некоторые реализуют сжатие на лету. Также контроллер распределяет циклы записи по всей области диска для предотвращения быстрого износа ячеек, объединяет несколько команд записи мелких данных в одну, опять же, для увеличения продолжительности жизни диска. Наконец, "мозги" твердотельных накопителей перемещают ячейки с данными по диску, чтобы те со временем не потеряли содержимое.<br />
*Может падать производительность в зависимости от заполненности диска. Не все производители реализовывают сборку мусора достаточно хорошо, поэтому фрагментированное свободное пространство не всегда объединяется в целые ячейки.<br />
<br />
==На что обращать внимание перед покупкой==<br />
Есть несколько ключевых особенностей, на которые стоит обратить внимание до покупки современных SSD.<br />
===Ключевые особенности===<br />
*Родная поддержка [http://en.wikipedia.org/wiki/TRIM TRIM]. Это жизненно необходимая функция для продления срока службы SSD и предотвращения уменьшения производительности операций записи от времени.<br />
*Также ключом является покупка SSD верного объема. Для эффективной работы разделы во всех файловых системах должны быть заполнены не более, чем на 75%.<br />
<br />
===Обзоры===<br />
Обзоры не такие уж полные, но основные ключевые особенности они освещают.<br />
*[http://www.anandtech.com/show/2738 SSD Anthology (history lesson, a bit dated)]<br />
*[http://www.anandtech.com/show/2829 SSD Relapse (refresher and more up to date])<br />
*[http://forums.anandtech.com/showthread.php?t=2069761 One user's recommendations]<br />
*[http://techgage.com/article/enabling_and_testing_ssd_trim_support_under_linux/ Enabling and Testing SSD TRIM Support Under Linux]<br />
<br />
==Советы по увеличению производительности SSD==<br />
===Параметры монтирования===<br />
Существует несколько ключевых параметров монтирования, используемых в {{ic|/etc/fstab}} для разделов на SSD.<br />
<br />
*'''noatime''' - Во время чтения файлов не будет обновляться поле atime файловой системы, указывающее время последнего доступа к файлу. Важность данного параметра в том, что он убирает необходимость системы производить "ненужные" операции записи когда файл всего-навсего необходимо прочитать. Т. к. эти операции записи могут быть достаточно интенсивными при чтении большого количества файлов, отключение может дать неплохой прирост производительности и срока жизни. Заметьте, что информация о времени последней записи файла будет по-прежнему обновляться каждый раз, когда файл будет изменён.<br />
*'''discard''' - Параметр discard включает команду TRIM для ядер версии 2.6.33 и выше. Не работает с файловой системой ext3; если всё же он включен на ext3, корневой раздел будет смонтирован только для чтения.<br />
<br />
/dev/sda1 / ext4 defaults,noatime,discard 0 1<br />
/dev/sda2 /home ext4 defaults,noatime,discard 0 1<br />
<br />
{{Warning|Критически важно перевести контроллер материнской платы в режим [[AHCI]] (не IDE!). Только в этом режиме ядро может работать с командой TRIM.}} <br />
{{Warning|Пользователь должен убедиться ещё ДО попытки монтирования раздела с опцией {{ic|discard}}, что он работает на ядре версии 2.6.33 или выше, а также, что его SDD поддерживает TRIM. Иначе можно потерять данные!}}<br />
<br />
====Специальные условия для компьютеров Mac====<br />
<br />
По умолчанию прошивка Apple переключает SATA диски в режим IDE (не AHCI), когда загружает любую другую ОС помимо Mac OS. Легко можно вернуть обратно режим AHCI используя [[GRUB]] с Intel SATA контроллером.<br />
<br />
Для начала определите PCI идентификатор SATA контроллера:<br />
# lspci -nn<br />
найдите строку с {{ic|SATA AHCI Controller}}. PCI идентификатор находится в квадратных скобках и должен выглядеть примерно так: 8086:27c4 (последние цифры могут быть другими).<br />
<br />
Теперь отредактируйте {{ic|/boot/grub/grub.cfg}} и добавьте {{ic|1=setpci -d 8086:27c4 90.b=40}} сразу перед строкой {{ic|set root}} для каждой ОС, в которой необходимо включить режим AHCI. Не забудьте заменить PCI идентификатор на свой.<br />
<br />
(источник: http://darkfader.blogspot.com/2010/04/windows-on-intel-mac-and-ahci-mode.html)<br />
<br />
Если у вас Macbook Unibody конца 2008 года (5.1), на нём стоит {{ic|nVidia Corporation MCP79 SATA Controller}}. Добавьте строку {{ic|1=setpci -d 10de:0ab5 9c.b=06}} в файл {{ic|/boot/grub/grub.cfg}}.<br />
<br />
=== I/O планировщик ===<br />
Рассмотрим переход со стандартного [https://en.wikipedia.org/wiki/CFQ CFQ] планировщика (Completely Fair Queuing) начиная с ядра 2.6.18 к планировщикам [http://en.wikipedia.org/wiki/Noop_scheduler NOOP] или [http://en.wikipedia.org/wiki/Deadline_scheduler Deadline]. Последние два обеспечивают повышение производительности SSD. Планировщик NOOP, например, реализует простую очередь входящих запросов чтения/записи без их переупорядочивания или группировки. На SSD, в отличие от HDD, время доступа одинаково для всех секторов, поэтому изменение порядка запросов не имеет смысла.<br />
<br />
Больше информации о планировщиках смотрите здесь: [http://www.linux-mag.com/id/7564/1 Linux Magazine article], [http://www.phoronix.com/scan.php?page=article&item=linux_iosched_2012 Phoronix benchmark] и {{Bug|22605}}.<br />
<br />
Arch по умолчанию использует планировщик CFQ. Убедиться в этом можно, выведя содержимое файла {{ic|/sys/block/sdX/queue/scheduler}}:<br />
$ cat /sys/block/sdX/queue/scheduler<br />
noop deadline [cfq]<br />
Планировщик, используемый в данный момент, выделен квадратными скобками. <br />
<br />
===== Параметр ядра (в системе только SSD) =====<br />
Если в системе нет других типов накопителей кроме SSD, планировщик включается параметром ядра {{ic|1=elevator=noop}}. Для дополнительной информации смотрите [[Kernel parameters]].<br />
Дополнительно, для редко используемых жестких дисков может быть настроен на использование CFQ-планировщик, методом объясненным ниже.<br />
Укажите 'cfq' вместо 'noop' и HDD вместо SSD, соответственно.<br />
<br />
===== Использование виртуальной ФС sys (для разных типов накопителей) =====<br />
Этот метод используется, когда в системе установлено несколько физических накопителей разных типов (например, одновременно SSD и HDD).<br />
Добавьте следующую строку в {{ic|/etc/rc.local}}:<br />
echo noop > /sys/block/sdX/queue/scheduler<br />
где X — буква вашего SSD устройства.<br />
<br />
Из-за вероятности того, что udev может назначать дискам разные ноды {{ic|/dev/}} до и после обновления ядра, пользователь должен убедиться, что планировщик NOOP применился к нужному устройству во время загрузки. Один из способов заключается в использовании идентификатора диска, чтобы определить его {{ic|/dev/}} ноду. Чтобы этого добиться, используйте данный кусок кода вместо строки выше и добавьте его в {{ic|/etc/rc.local}}:<br />
declare -ar SSDS=(<br />
'scsi-SATA_SAMSUNG_SSD_PM8_S0NUNEAB861972'<br />
'ata-SAMSUNG_SSD_PM810_2.5__7mm_256GB_S0NUNEAB861972'<br />
)<br />
<br />
for SSD in "${SSDS[@]}" ; do<br />
BY_ID=/dev/disk/by-id/$SSD<br />
<br />
if &#91;&#91; -e $BY_ID ]] ; then<br />
DEV_NAME=`ls -l $BY_ID | awk '{ print $NF }' | sed -e 's/[/\.]//g'`<br />
SCHED=/sys/block/$DEV_NAME/queue/scheduler<br />
<br />
if &#91;&#91; -w $SCHED ]] ; then<br />
echo noop > $SCHED<br />
fi<br />
fi<br />
done<br />
где {{ic|SSDS}} — массив Bash, содержащий идентификаторы всех SSD-дисков. Идентификаторы перечислены в директории {{ic|/dev/disk/by-id/}} в виде символьных ссылок на соответствующие ноды в {{ic|/dev/}}. Чтобы увидеть ссылки и то, куда они указывают, выполните команду:<br />
ls -l /dev/disk/by-id/<br />
<br />
=====Использование udev как для одного накопителя, так и для нескольких разных=====<br />
Хотя вышеописанные методы будут работать без проблем, это также довольно надёжное решение. Следует также отметить, что с переходом на [[systemd]], файл rc.local больше не существует. Следовательно, было бы предпочтительнее использовать систему, которая отвечает за устройства, в первую очередь для реализации планировщика. В нашем случае это udev, и чтобы осуществить задуманное, всё что нам нужно — простое [[udev]]-правило.<br />
<br />
Создайте файл в директории /etc/udev/rules.d с именем, например, '60-schedulers.rules'. Запишите в него следующие строки:<br />
# установка планировщика deadline для SSD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"<br />
<br />
# установка планировщика cfq для HDD<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"<br />
Конечно же вы можете заменить deadline/cfq любыми другими планировщиками. Изменения вступают в силу после перезагрузки. Чтобы проверить успешность срабатывания правила, выполните команду<br />
$ cat /sys/block/sdX/queue/scheduler #где X — буква физического накопителя<br />
{{note|Имейте в виду, CFQ является планировщиком по умолчанию, так что второе правило на самом деле не нужно, если вы пользуетесь стандартным ядром. Также в примере имя правила начинается с числа 60, т. к. это число udev использует для своих строгих правил именования. Блочные устройства в этом диапазоне чисел могут модифицироваться, и это безопасная позиция для данного правила. Однако, правило может называться как угодно, при этом оканчиваться на '.rules'. (Источник: falconindy и w0ng на своём блоге)}}<br />
<br />
=== Разделы подкачки на SSD ===<br />
Можно размещать раздел подкачки на SSD. Но с другой стороны, современные компьютеры, имеющие более 2 ГБ оперативной памяти, используют раздел подкачки очень редко. Заметным исключением являются системы, которые используют спящий режим. Следующая оптимизация для SSD уменьшает "swappiness" системы, чтобы избежать записей подкачки:<br />
<br />
# echo 1 > /proc/sys/vm/swappiness<br />
<br />
Или можно просто изменить файл {{ic|/etc/sysctl.conf}} как рекомендуется в вики-статье [[Maximizing_performance#Swappiness|Maximizing Performance]]:<br />
<br />
vm.swappiness=1<br />
vm.vfs_cache_pressure=50<br />
<br />
=== Очистка ячеек памяти SSD ===<br />
В некоторых случаях, пользователь может полностью сбросить ячейки SSD в состояние, подобное моменту покупки нового накопителя, такие образом добиться [http://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 заводской производительности]. Скорость записи уменьшается со временем даже с поддержкой TRIM. TRIM работает только с удалением файлов, но не с перемещением и инкрементальными сохранениями.<br />
<br />
Сброс ячеек легко выполнить за 3 шага, описанных в вики-статье [[SSD Memory Cell Clearing]].<br />
<br />
==Советы для уменьшения операций чтения/записи==<br />
Основной идеей долговечного использования SSD является перенос интенсивных операция ввода/вывода в оперативную память или HDD, в основном из-за большого размера блока очистки (512 КиБ в некоторых случаях).<br />
<br />
{{Note|32ГБ SSD с посредственным 10-кратным показателем write amplification, стандартными 10000 циклами чтения/записи и '''10ГБ записей в день''' дают '''8 лет жизни'''. Также, дольше живут диски с наибольшими объемами и современными контроллерами, которые имеют меньший показатель write amplification.}}<br />
<br />
Используйте команду {{ic|iotop -oPa}} и отсортируйте по количеству записей, чтобы увидеть сколько пишется на диск.<br />
<br />
=== Продуманная схема разделов ===<br />
Для старых и дешёвых SSD рекомендуется выносить раздел {{ic|/var}} за пределы физического диска, чтобы избежать множества операций чтения/записи. Для современных же накопителей хорошего качества лучше оставить {{ic|/var}} на SSD, т. к. это один из самых используемых подсистемой ввода/вывода разделов в Linux, таким образом увеличивается общая производительность системы. Arch монтирует {{ic|/tmp}} на {{ic|tmpfs}} с июля 2011. Это означает, что раздел находится в оперативной памяти вместо диска.<br />
<br />
Если SSD является единственным диском в системе, и нет возможности использовать совместно с HDD, разумно так же выделить отдельный раздел для {{ic|/var}}, чтобы в дальнейшем при возникновении ошибки было легче восстановить систему. Например, если программа использовала всё доступное пространство в {{ic|/}}, или какой-либо лог превысил все разумные размеры, и т. п..<br />
<br />
=== Опция монтирования noatime ===<br />
Монтируйте разделы SSD с опцией {{ic|noatime}}. См. раздел [[#Mount_Flags|Mount Flags]].<br />
<br />
=== Расположите часто используемые файлы в оперативной памяти ===<br />
==== Профили браузеров ====<br />
Можно ''без труда'' монтировать профили браузеров, таких как chromium, firefox, opera, и т.д. в оперативную память через tmpfs и использовать rsync для синхронизации с копиями на диске. Таким образом можно так же заметно сократить количество операций чтения/записи.<br />
<br />
В AUR есть несколько пакетов для автоматизации этого, например {{AUR|profile-sync-daemon}}.<br />
<br />
==== Другие ====<br />
По этой же вышеописанной причине можно расположить в оперативной памяти раздел {{ic|/srv/http}} (если запущен web-сервер). Аналогом {{AUR|profile-sync-daemon}} здесь будет {{AUR|anything-sync-daemon}}, который позволяет определить '''любую''' директорию для синхронизации с оперативной памятью.<br />
<br />
{{Warning|НЕ пытайтесь добавлять /var/log в anything-sync-daemon. Systemd очень разозлится на это.}}<br />
<br />
=== Компиляция в tmpfs ===<br />
Интенсивная компиляция в {{ic|/tmp}} — отличная идея продления срока жизни диска. Если у вас имеется более 4ГБ оперативной памяти, строку tmp из {{ic|/etc/fstab}} нужно изменить, чтобы раздел использовал больше половины доступной памяти, через параметр {{ic|1=size=}}, т. к. {{ic|/tmp}} при компиляции растёт очень быстро.<br />
<br />
Пример для машины с 8ГБ оперативки:<br />
tmpfs /tmp tmpfs nodev,nosuid,size=7G 0 0<br />
<br />
=== Отключение журналирования ФС ===<br />
Использование журналируемых ФС типа ext3 или ext4 с ОТКЛЮЧЕННЫМ журналом на SSD тоже сократит количество записей на диск. Очевидным недостатком этого будет являться потеря данных при неудачном размонтировании (резкое отключение питания, блокировка ядра и т. д.). Однако, [http://tytso.livejournal.com/61830.html Ted Tso] выступает в защиту журналирования на современных SSD, т. к. по его тестам оно незначительно влияет на количество записей в большинстве случаев:<br />
<br />
'''Количество записанных данных (в мегабайтах) на ФС ext4 с параметром noatime.'''<br />
{| border="1" cellpadding="5"<br />
! операция !! с журналом !! без журнала !! разница<br />
|-<br />
!git clone<br />
|367.0<br />
|353.0<br />
|3.81 %<br />
|-<br />
!make<br />
|207.6<br />
|199.4<br />
|3.95 %<br />
|-<br />
!make clean<br />
|6.45<br />
|3.73<br />
|42.17 %<br />
|}<br />
<br />
''"Результаты показали, что записанный объём при работе с большим количеством мета-данных почти в 2 раза выше, чем реальный размер файлов. Это ожидаемо, т. к. все изменения в блоках мета-данных сначала пишутся в журнал, и транзакция журнала сбрасывается перед тем, как мета-данные будут записаны в конечное положение на диск. Однако же, для обычных задач, где данные пишутся сразу за мета-данными, разница в лишних операциях записи минимальна."''<br />
<br />
{{Note|Пример make clean из таблицы выше показывает важность переноса компиляции в tmpfs как рекомендовано в предыдущем разделе!}}<br />
<br />
=== Выбор файловой системы ===<br />
Существуют различные варианты выбора файловых систем, включая Ext2/3/4, Btrfs, и т. д.<br />
<br />
==== Btrfs ====<br />
Поддержка [http://en.wikipedia.org/wiki/Btrfs Btrfs] включена в ядро с версии 2.6.29. Некоторые считают, что она не является достаточно стабильной для повседневного использования, в то время как есть и явные сторонники этого потенциального преемника ext4. Рекомендуется прочитать статью [[Btrfs]] для дополнительной информации.<br />
<br />
==== Ext4 ====<br />
[http://en.wikipedia.org/wiki/Ext4 Ext4] — ещё одна файловая система, поддерживающая SSD. Считается стабильной и пригодной для повседневного использования с версии ядра 2.6.28. В отличие от Btrfs, ext4 не умеет автоматически определять тип диска; пользователи сами должны явно включить поддержку команды TRIM, используя параметр монтирования {{ic|discard}} в [[fstab]] (или командой {{ic|tune2fs -o discard /dev/sdaX}}).<br />
См. [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/filesystems/ext4.txt official in kernel tree documentation] для подробной информации об ext4.<br />
<br />
== Тестирования производительности SSD ==<br />
См. статью [[SSD Benchmarking]] для дополнительной информации о тестировании, либо просмотра результатов некоторых SSD.<br />
<br />
== Обновление прошивок ==<br />
=== OCZ ===<br />
Для дисков компании OCZ имеется утилита командной строки для Linux (i686 и x86_64) на их [http://www.ocztechnology.com/ssd_tools/ форуме].<br />
<br />
== См. также ==<br />
* [http://www.reddit.com/r/archlinux/comments/rkwjm/what_should_i_keep_in_mind_when_installing_on_ssd/ Discussion on Reddit about installing Arch on an SSD]</div>TrueBershttps://wiki.archlinux.org/index.php?title=Solid_state_drive&diff=224212Solid state drive2012-09-21T02:59:03Z<p>TrueBers: </p>
<hr />
<div>[[Category:Storage]]<br />
[[it:Solid State Drives]]<br />
[[zh-CN:Solid State Drives]]<br />
[[ru:Твердотельные накопители (SSD)]]<br />
{{Article summary start}}<br />
{{Article summary text|This article covers many aspects of SSDs (solid state drives) as they relate to Linux; however, the underlying principals and key learning presented within are general enough to be applicable to users running SSDs on other operating systems such as the Windows family of products as well as Mac OS X. Beyond the aforementioned information, Linux users will benefit from the tweaks/optimization presented herein.}}<br />
{{Article summary heading|Related Articles}}<br />
{{Article summary wiki|SSD Benchmarking}}<br />
{{Article summary wiki|SSD Memory Cell Clearing}}<br />
{{Article summary end}}<br />
<br />
==Introduction==<br />
Solid State Drives (SSDs) are not PnP devices. Special considerations such as partition alignment, choice of file system, TRIM support, etc. are needed to set up SSDs for optimal performance. This article attempts to capture referenced, key learnings to enable users to get the most out of SSDs under Linux. Users are encouraged to read this article in its entirety before acting on recommendations as the content is organized by topic, not necessarily by any systematic or chronologically relevant order.<br />
<br />
{{Note|This article is targeted at users running Linux, but much of the content is also relevant to our friends using other operating systems like BSD, Mac OS X or Windows.}}<br />
===Advantages over HDDs===<br />
*Fast read speeds - 2-3x faster than modern desktop HDDs (7,200 RPM using SATA2 interface).<br />
*Sustained read speeds - no decrease in read speed across the entirety of the device. HDD performance tapers off as the drive heads move from the outer edges to the center of HDD platters.<br />
*Minimal access time - approximately 100x faster than an HDD. For example, 0.1 ms (100 ns) vs. 12-20 ms (12,000-20,000 ns) for desktop HDDs.<br />
*High degree of reliability.<br />
*No moving parts.<br />
*Minimal heat production.<br />
*Minimal power consumption - fractions of a W at idle and 1-2 W while reading/writing vs. 10-30 W for a HDD depending on RPMs.<br />
*Light-weight - ideal for laptops.<br />
<br />
===Limitations===<br />
*Per-storage cost (dollars per GB, vs. pennies per GB for rotating media).<br />
*Capacity of marketed models is lower than that of HDDs.<br />
*Large cells require different filesystem optimizations than rotating media. The flash translation layer hides the raw flash access which a modern OS could use to optimize access.<br />
*Partitions and filesystems need some SSD-specific tuning. Page size and erase page size are not autodetected.<br />
*Cells wear out. Consumer MLC cells at mature 50nm processes can handle 10000 writes each; 35nm generally handles 5000 writes, and 25nm 3000 (smaller being higher density and cheaper). If writes are properly spread out, are not too small, and align well with cells, this translates into a lifetime write volume for the SSD that is a multiple of its capacity. Daily write volumes have to be balanced against life expectancy.<br />
*Firmwares and controllers are complex. They occasionally have bugs. Modern ones consume power comparable with HDDs. They [https://lwn.net/Articles/353411/ implement] the equivalent of a log-structured filesystem with garbage collection. They translate SATA commands traditionally intended for rotating media. Some of them do on the fly compression. They spread out repeated writes across the entire area of the flash, to prevent wearing out some cells prematurely. They also coalesce writes together so that small writes are not amplified into as many erase cycles of large cells. Finally they move cells containing data so that the cell does not lose its contents over time.<br />
*Performance can drop as the disk gets filled. Garbage collection is not universally well implemented, meaning freed space is not always collected into entirely free cells.<br />
<br />
==Pre-Purchase Considerations==<br />
There are several key features to look for prior to purchasing a contemporary SSD.<br />
===Key Features===<br />
*Native [http://en.wikipedia.org/wiki/TRIM TRIM] support is a vital feature that both prolongs SSD lifetime and reduces loss of performance for write operations over time.<br />
*Buying the right sized SSD is key. As with all filesystems, target <75 % occupancy for all SSD partitions to ensure efficient use by the kernel.<br />
<br />
===Reviews===<br />
This section is not meant to be all-inclusive, but does capture some key reviews.<br />
*[http://www.anandtech.com/show/2738 SSD Anthology (history lesson, a bit dated)]<br />
*[http://www.anandtech.com/show/2829 SSD Relapse (refresher and more up to date])<br />
*[http://forums.anandtech.com/showthread.php?t=2069761 One user's recommendations]<br />
*[http://techgage.com/article/enabling_and_testing_ssd_trim_support_under_linux/ Enabling and Testing SSD TRIM Support Under Linux]<br />
<br />
==Tips for Maximizing SSD Performance==<br />
===Mount Flags===<br />
There are several key mount flags to use in one's {{ic|/etc/fstab}} entries for SSD partitions.<br />
<br />
*'''noatime''' - Reading accesses to the file system will no longer result in an update to the atime information associated with the file. The importance of the noatime setting is that it eliminates the need by the system to make writes to the file system for files which are simply being read. Since writes can be somewhat expensive as mentioned in previous section, this can result in measurable performance gains. Note that the write time information to a file will continue to be updated anytime the file is written to with this option enabled.<br />
*'''discard''' - The discard flag will enable the benefits of the TRIM command as long as one is using kernel version >=2.6.33. It does not work with ext3; using the discard flag for an ext3 root partition will result in it being mounted read-only.<br />
<br />
/dev/sda1 / ext4 defaults,noatime,discard 0 1<br />
/dev/sda2 /home ext4 defaults,noatime,discard 0 1<br />
<br />
{{Warning|It is critically important that users switch the controller driving the SSD to [[AHCI]] mode (not IDE mode) to ensure that the kernel is able to use the TRIM command.}} <br />
{{Warning|Users need to be certain that kernel version 2.6.33 or above is being used AND that their SSD supports TRIM before attempting to mount a partition with the {{ic|discard}} flag. Data loss can occur otherwise!}}<br />
<br />
====Special considerations for Mac computers====<br />
<br />
By default, Apple's firmware switches SATA drives into IDE mode (not AHCI mode) when booting any OS besides Mac OS. It is easy to switch back to AHCI if using [[GRUB]] with an Intel SATA controller.<br />
<br />
First determine the PCI identifier of the SATA controller:<br />
# lspci -nn<br />
and find the line that says {{ic|SATA AHCI Controller}}. The PCI identifier is in square brackets and should look like 8086:27c4 (but the last digits may be different).<br />
<br />
Now edit {{ic|/boot/grub/grub.cfg}} and add the line {{ic|1=setpci -d 8086:27c4 90.b=40}} right above the {{ic|set root}} line of each OS for which AHCI wil be enabled. Be sure to substitute the appropriate PCI identifier.<br />
<br />
(credit: http://darkfader.blogspot.com/2010/04/windows-on-intel-mac-and-ahci-mode.html)<br />
<br />
If you have a Macbook Unibody late 2008 (5.1), yours has a {{ic|nVidia Corporation MCP79 SATA Controller}} an Intel one. Add the line {{ic|1=setpci -d 10de:0ab5 9c.b=06}} to {{ic|/boot/grub/grub.cfg}}.<br />
<br />
=== I/O Scheduler ===<br />
Consider switching from the default [https://en.wikipedia.org/wiki/CFQ CFQ] scheduler (Completely Fair Queuing) since 2.6.18 to [http://en.wikipedia.org/wiki/NOOP_scheduler NOOP] or [http://en.wikipedia.org/wiki/Deadline_scheduler Deadline]. The latter two offer performance boosts for SSDs. The NOOP scheduler, for example, implements a simple queue for all incoming I/O requests, without re-ordering and grouping the ones that are physically closer on the disk. On SSDs seek times are identical for all sectors, thus invalidating the need to re-order I/O queues based on them.<br />
<br />
For more on schedulers, see these: [http://www.linux-mag.com/id/7564/1 Linux Magazine article], [http://www.phoronix.com/scan.php?page=article&item=linux_iosched_2012 Phoronix benchmark] and {{Bug|22605}}.<br />
<br />
The CFQ scheduler is enabled by default on Arch. Verify this by viewing the contents {{ic|/sys/block/sdX/queue/scheduler}}:<br />
$ cat /sys/block/sdX/queue/scheduler<br />
noop deadline [cfq]<br />
The scheduler currently in use is denoted from the available schedulers by the brackets. <br />
<br />
===== Kernel parameter (for a single device) =====<br />
If the sole storage device in the system is an SSD, consider setting the I/O scheduler for the entire system via the {{ic|1=elevator=noop}} kernel parameter. See [[Kernel parameters]] for more info.<br />
Additional infrequently used hard drives can be set to use the cfq scheduler with the method explained below.<br />
Replace 'noop' with 'cfq' and the array of SSDs with your hard drives to achieve this effect.<br />
<br />
===== Using the sys virtual filesystem (for multiple devices) =====<br />
This method is preferred when the system has several physical storage devices (for example an SSD and an HDD).<br />
Add the following line in {{ic|/etc/rc.local}}:<br />
echo noop > /sys/block/sdX/queue/scheduler<br />
where X is the letter for the SSD device.<br />
<br />
Because of the potential for udev to assign different {{ic|/dev/}} nodes to drives before and after a kernel update, users must take care that the NOOP scheduler is applied to the correct device upon boot. One way to do this is by using the SSD's device ID to determine its {{ic|/dev/}} node. To do this automatically, use the following snippet instead of the line above and add it to {{ic|/etc/rc.local}}:<br />
declare -ar SSDS=(<br />
'scsi-SATA_SAMSUNG_SSD_PM8_S0NUNEAB861972'<br />
'ata-SAMSUNG_SSD_PM810_2.5__7mm_256GB_S0NUNEAB861972'<br />
)<br />
<br />
for SSD in "${SSDS[@]}" ; do<br />
BY_ID=/dev/disk/by-id/$SSD<br />
<br />
if &#91;&#91; -e $BY_ID ]] ; then<br />
DEV_NAME=`ls -l $BY_ID | awk '{ print $NF }' | sed -e 's/[/\.]//g'`<br />
SCHED=/sys/block/$DEV_NAME/queue/scheduler<br />
<br />
if &#91;&#91; -w $SCHED ]] ; then<br />
echo noop > $SCHED<br />
fi<br />
fi<br />
done<br />
where {{ic|SSDS}} is a Bash array containing the device IDs of all SSD devices. Device IDs are listed in {{ic|/dev/disk/by-id/}} as symbolic links pointing to their corresponding {{ic|/dev/}} nodes. To view the links listed with their targets, issue the following command:<br />
ls -l /dev/disk/by-id/<br />
<br />
=====Using udev for one device or HDD/SSD mixed environment=====<br />
Though the above will undoubtedly work, it is probably considered a reliable workaround. It should also be noted that with the move to [[systemd]] there will be no rc.local. Ergo, it would be preferred to use the system that is responsible for the devices in the first place to implement the scheduler. In this case it is udev, and to do this, all one needs is a simple [[udev]] rule.<br />
<br />
To do this, create and edit a file in /etc/udev/rules.d named something like '60-schedulers.rules'. In the file include the following:<br />
# set deadline scheduler for non-rotating disks<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"<br />
<br />
# set cfq scheduler for rotating disks<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"<br />
Of course, set deadline/cfq to the desired schedulers. Changes should occur upon next boot. To check success of your new rule do<br />
$ cat /sys/block/sdX/queue/scheduler #where X is the device in question<br />
{{note|Keep in mind cfq is the default scheduler, so the second rule with the standard kernel is not actually necessary. Also, in the example sixty is chosen because that is the number udev uses for its own persistent naming rules. Thus, it would seem that block devices are at this point able to be modified and this is a safe position for this particular rule. But the rule can be named anything you desire so long as it ends in '.rules'. (Credit: falconindy and w0ng for posting on his blog)}}<br />
<br />
=== Swap Space on SSDs ===<br />
One can place a swap partition on an SSD. Note that most modern desktops with an excess of 2 Gigs of memory rarely use swap at all. The notable exception is systems which make use of the hibernate feature. The following is recommended tweak for SSDs using a swap partition that will reduce the "swappiness" of the system thus avoiding writes to swap:<br />
<br />
# echo 1 > /proc/sys/vm/swappiness<br />
<br />
Or one can simply modify {{ic|/etc/sysctl.conf}} as recommended in the [[Maximizing_performance#Swappiness|Maximizing Performance]] wiki article:<br />
<br />
vm.swappiness=1<br />
vm.vfs_cache_pressure=50<br />
<br />
=== SSD Memory Cell Clearing ===<br />
On occasion, users may wish to completely reset an SSD's cells to the same virgin state they were at the time he/she installed the device thus restoring it to its [http://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 factory default write performance]. Write performance is known to degrade over time even on SSDs with native TRIM support. TRIM only safeguards against file deletes, not replacements such as an incremental save.<br />
<br />
The reset is easily accomplished in a three step procedure denoted on the [[SSD Memory Cell Clearing]] wiki article.<br />
<br />
==Tips for Minimizing SSD Read/Writes==<br />
An overarching theme for SSD usage should be 'simplicity' in terms of locating high-read/write operations either in RAM (Random Access Memory) or on a physical HDD rather than on an SSD. Doing so will add longevity to an SSD. This is primarily due to the large erase block size (512 KiB in some cases); a lot of small writes result in huge effective writes.<br />
<br />
{{Note|A 32GB SSD with a mediocre 10x write amplification factor, a standard 10000 write/erase cycle, and '''10GB of data written per day''', would get an '''8 years life expectancy'''. It gets better with bigger SSDs and modern controllers with less write amplification.}}<br />
<br />
Use {{ic|iotop -oPa}} and sort by disk writes to see how much programs are writing to disk.<br />
<br />
=== Intelligent Partition Scheme ===<br />
For older, cheap or otherwise poor SSDs consider relocating the {{ic|/var}} partition to a physical disc on the system rather than on the SSD itself to avoid read/write wear. For a modern good quality SSD it is recommended to keep {{ic|/var}} on the SSD, since it's one of the most active partitions on linux and depends heavily on the speed of the disk. {{ic|/tmp}} has been mounted as {{ic|tmpfs}} on Arch since July 2011, meaning it is located in RAM instead of the disk.<br />
<br />
If the SSD is the only storage device on the system (i.e. no HDDs), consider allocating a separate partition for {{ic|/var}} to allow for better crash recovery for example in the event of a broken program wasting all the space on {{ic|/}} or if some run away log file maxes out the space, etc.<br />
<br />
=== The noatime Mount Flag ===<br />
Assign the {{ic|noatime}} flag to partitions residing on SSDs. See the [[#Mount_Flags|Mount Flags]] section below for more.<br />
<br />
=== Locate High-Use Files to RAM ===<br />
==== Browser Profiles ====<br />
One can ''easily'' mount browser profile(s) such as chromium, firefox, opera, etc. into RAM via tmpfs and also use rsync to keep them synced with HDD-based backups. In addition to the obvious speed enhancements, users will also save read/write cycles on their SSD by doing so.<br />
<br />
The AUR contains several packages to automate this process, for example {{AUR|profile-sync-daemon}}.<br />
<br />
==== Others ====<br />
For the same reasons a browser's profile can be relocated to RAM, so can highly used directories such as {{ic|/srv/http}} (if running a web server). A sister project to {{AUR|profile-sync-daemon}} is {{AUR|anything-sync-daemon}}, which allows users to define '''any''' directory to sync to RAM using the same underlying logic and safe guards.<br />
<br />
{{Warning|Do NOT attempt to add /var/log to anything-sync-daemon. Systemd gets really pissed if you do.}}<br />
<br />
=== Compiling in tmpfs ===<br />
Intentionally compiling in {{ic|/tmp}} is a great idea to minimize this problem. For systems with >4 GB of memory, the tmp line in {{ic|/etc/fstab}} can be tweaked to use more than 1/2 the physical memory on the system via the {{ic|1=size=}} flag as {{ic|/tmp}} keeps filling up.<br />
<br />
Example of a machine with 8 GB of physical memory:<br />
tmpfs /tmp tmpfs nodev,nosuid,size=7G 0 0<br />
<br />
=== Disabling Journaling on the filesystem ===<br />
Using a journaling filesystem such as ext3 or ext4 on an SSD WITHOUT a journal is an option to decrease read/writes. The obvious drawback of using a filesystem with journaling disabled is data loss as a result of an ungraceful dismount (i.e. post power failure, kernel lockup, etc.). With modern SSDs, [http://tytso.livejournal.com/61830.html Ted Tso] advocates that journaling can be enabled with minimal extraneous read/write cycles under most circumstances:<br />
<br />
'''Amount of data written (in megabytes) on an ext4 file system mounted with noatime.'''<br />
{| border="1" cellpadding="5"<br />
! operation !! journal !! w/o journal !! percent change<br />
|-<br />
!git clone<br />
|367.0<br />
|353.0<br />
|3.81 %<br />
|-<br />
!make<br />
|207.6<br />
|199.4<br />
|3.95 %<br />
|-<br />
!make clean<br />
|6.45<br />
|3.73<br />
|42.17 %<br />
|}<br />
<br />
''"What the results show is that metadata-heavy workloads, such as make clean, do result in almost twice the amount data written to disk. This is to be expected, since all changes to metadata blocks are first written to the journal and the journal transaction committed before the metadata is written to their final location on disk. However, for more common workloads where we are writing data as well as modifying filesystem metadata blocks, the difference is much smaller."''<br />
<br />
{{Note|The make clean example from the table above typifies the importance of intentionally doing compiling in tmpfs as recommended in the [[Solid_State_Drives#Compiling_in_tmpfs|preceding section]] of this article!}}<br />
<br />
=== Choice of Filesystem ===<br />
Many options exist for file systems including Ext2/3/4, Btrfs, etc.<br />
<br />
==== Btrfs ====<br />
[http://en.wikipedia.org/wiki/Btrfs Btrfs] support has been included with the mainline 2.6.29 release of the Linux kernel. Some feel that it is not mature enough for production use while there are also early adopters of this potential successor to ext4. Users are encouraged to read the [[Btrfs]] article for more info.<br />
<br />
==== Ext4 ====<br />
[http://en.wikipedia.org/wiki/Ext4 Ext4] is another filesystem that has support for SSD. It is considered as stable since 2.6.28 and is mature enough for daily use. Contrary to Btrfs, ext4 does not automatically detect the disk nature; users must explicitly enable the TRIM command support using the {{ic|discard}} mount option in [[fstab]] (or with {{ic|tune2fs -o discard /dev/sdaX}}).<br />
See the [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/filesystems/ext4.txt official in kernel tree documentation] for further information on ext4.<br />
<br />
== SSD Benchmarking ==<br />
See the [[SSD Benchmarking]] article for a general process of benchmarking SSDs or to see some of the SSDs in the database.<br />
<br />
== Firmware Updates ==<br />
=== OCZ ===<br />
OCZ has a command line utility available for Linux (i686 and x86_64) on their forum [http://www.ocztechnology.com/ssd_tools/ here].<br />
<br />
== See also ==<br />
* [http://www.reddit.com/r/archlinux/comments/rkwjm/what_should_i_keep_in_mind_when_installing_on_ssd/ Discussion on Reddit about installing Arch on an SSD]</div>TrueBershttps://wiki.archlinux.org/index.php?title=Solid_state_drive&diff=224164Solid state drive2012-09-20T20:55:30Z<p>TrueBers: added Russian interlanguage link</p>
<hr />
<div>[[Category:Storage]]<br />
[[it:Solid State Drives]]<br />
[[zh-CN:Solid State Drives]]<br />
[[ru: Твёрдотельные накопители (SSD)]]<br />
{{Article summary start}}<br />
{{Article summary text|This article covers many aspects of SSDs (solid state drives) as they relate to Linux; however, the underlying principals and key learning presented within are general enough to be applicable to users running SSDs on other operating systems such as the Windows family of products as well as Mac OS X. Beyond the aforementioned information, Linux users will benefit from the tweaks/optimization presented herein.}}<br />
{{Article summary heading|Related Articles}}<br />
{{Article summary wiki|SSD Benchmarking}}<br />
{{Article summary wiki|SSD Memory Cell Clearing}}<br />
{{Article summary end}}<br />
<br />
==Introduction==<br />
Solid State Drives (SSDs) are not PnP devices. Special considerations such as partition alignment, choice of file system, TRIM support, etc. are needed to set up SSDs for optimal performance. This article attempts to capture referenced, key learnings to enable users to get the most out of SSDs under Linux. Users are encouraged to read this article in its entirety before acting on recommendations as the content is organized by topic, not necessarily by any systematic or chronologically relevant order.<br />
<br />
{{Note|This article is targeted at users running Linux, but much of the content is also relevant to our friends using other operating systems like BSD, Mac OS X or Windows.}}<br />
===Advantages over HDDs===<br />
*Fast read speeds - 2-3x faster than modern desktop HDDs (7,200 RPM using SATA2 interface).<br />
*Sustained read speeds - no decrease in read speed across the entirety of the device. HDD performance tapers off as the drive heads move from the outer edges to the center of HDD platters.<br />
*Minimal access time - approximately 100x faster than an HDD. For example, 0.1 ms (100 ns) vs. 12-20 ms (12,000-20,000 ns) for desktop HDDs.<br />
*High degree of reliability.<br />
*No moving parts.<br />
*Minimal heat production.<br />
*Minimal power consumption - fractions of a W at idle and 1-2 W while reading/writing vs. 10-30 W for a HDD depending on RPMs.<br />
*Light-weight - ideal for laptops.<br />
<br />
===Limitations===<br />
*Per-storage cost (dollars per GB, vs. pennies per GB for rotating media).<br />
*Capacity of marketed models is lower than that of HDDs.<br />
*Large cells require different filesystem optimizations than rotating media. The flash translation layer hides the raw flash access which a modern OS could use to optimize access.<br />
*Partitions and filesystems need some SSD-specific tuning. Page size and erase page size are not autodetected.<br />
*Cells wear out. Consumer MLC cells at mature 50nm processes can handle 10000 writes each; 35nm generally handles 5000 writes, and 25nm 3000 (smaller being higher density and cheaper). If writes are properly spread out, are not too small, and align well with cells, this translates into a lifetime write volume for the SSD that is a multiple of its capacity. Daily write volumes have to be balanced against life expectancy.<br />
*Firmwares and controllers are complex. They occasionally have bugs. Modern ones consume power comparable with HDDs. They [https://lwn.net/Articles/353411/ implement] the equivalent of a log-structured filesystem with garbage collection. They translate SATA commands traditionally intended for rotating media. Some of them do on the fly compression. They spread out repeated writes across the entire area of the flash, to prevent wearing out some cells prematurely. They also coalesce writes together so that small writes are not amplified into as many erase cycles of large cells. Finally they move cells containing data so that the cell does not lose its contents over time.<br />
*Performance can drop as the disk gets filled. Garbage collection is not universally well implemented, meaning freed space is not always collected into entirely free cells.<br />
<br />
==Pre-Purchase Considerations==<br />
There are several key features to look for prior to purchasing a contemporary SSD.<br />
===Key Features===<br />
*Native [http://en.wikipedia.org/wiki/TRIM TRIM] support is a vital feature that both prolongs SSD lifetime and reduces loss of performance for write operations over time.<br />
*Buying the right sized SSD is key. As with all filesystems, target <75 % occupancy for all SSD partitions to ensure efficient use by the kernel.<br />
<br />
===Reviews===<br />
This section is not meant to be all-inclusive, but does capture some key reviews.<br />
*[http://www.anandtech.com/show/2738 SSD Anthology (history lesson, a bit dated)]<br />
*[http://www.anandtech.com/show/2829 SSD Relapse (refresher and more up to date])<br />
*[http://forums.anandtech.com/showthread.php?t=2069761 One user's recommendations]<br />
*[http://techgage.com/article/enabling_and_testing_ssd_trim_support_under_linux/ Enabling and Testing SSD TRIM Support Under Linux]<br />
<br />
==Tips for Maximizing SSD Performance==<br />
===Mount Flags===<br />
There are several key mount flags to use in one's {{ic|/etc/fstab}} entries for SSD partitions.<br />
<br />
*'''noatime''' - Reading accesses to the file system will no longer result in an update to the atime information associated with the file. The importance of the noatime setting is that it eliminates the need by the system to make writes to the file system for files which are simply being read. Since writes can be somewhat expensive as mentioned in previous section, this can result in measurable performance gains. Note that the write time information to a file will continue to be updated anytime the file is written to with this option enabled.<br />
*'''discard''' - The discard flag will enable the benefits of the TRIM command as long as one is using kernel version >=2.6.33. It does not work with ext3; using the discard flag for an ext3 root partition will result in it being mounted read-only.<br />
<br />
/dev/sda1 / ext4 defaults,noatime,discard 0 1<br />
/dev/sda2 /home ext4 defaults,noatime,discard 0 1<br />
<br />
{{Warning|It is critically important that users switch the controller driving the SSD to [[AHCI]] mode (not IDE mode) to ensure that the kernel is able to use the TRIM command.}} <br />
{{Warning|Users need to be certain that kernel version 2.6.33 or above is being used AND that their SSD supports TRIM before attempting to mount a partition with the {{ic|discard}} flag. Data loss can occur otherwise!}}<br />
<br />
====Special considerations for Mac computers====<br />
<br />
By default, Apple's firmware switches SATA drives into IDE mode (not AHCI mode) when booting any OS besides Mac OS. It is easy to switch back to AHCI if using [[GRUB]] with an Intel SATA controller.<br />
<br />
First determine the PCI identifier of the SATA controller:<br />
# lspci -nn<br />
and find the line that says {{ic|SATA AHCI Controller}}. The PCI identifier is in square brackets and should look like 8086:27c4 (but the last digits may be different).<br />
<br />
Now edit {{ic|/boot/grub/grub.cfg}} and add the line {{ic|1=setpci -d 8086:27c4 90.b=40}} right above the {{ic|set root}} line of each OS for which AHCI wil be enabled. Be sure to substitute the appropriate PCI identifier.<br />
<br />
(credit: http://darkfader.blogspot.com/2010/04/windows-on-intel-mac-and-ahci-mode.html)<br />
<br />
If you have a Macbook Unibody late 2008 (5.1), yours has a {{ic|nVidia Corporation MCP79 SATA Controller}} an Intel one. Add the line {{ic|1=setpci -d 10de:0ab5 9c.b=06}} to {{ic|/boot/grub/grub.cfg}}.<br />
<br />
=== I/O Scheduler ===<br />
Consider switching from the default [https://en.wikipedia.org/wiki/CFQ CFQ] scheduler (Completely Fair Queuing) since 2.6.18 to [http://en.wikipedia.org/wiki/NOOP_scheduler NOOP] or [http://en.wikipedia.org/wiki/Deadline_scheduler Deadline]. The latter two offer performance boosts for SSDs. The NOOP scheduler, for example, implements a simple queue for all incoming I/O requests, without re-ordering and grouping the ones that are physically closer on the disk. On SSDs seek times are identical for all sectors, thus invalidating the need to re-order I/O queues based on them.<br />
<br />
For more on schedulers, see these: [http://www.linux-mag.com/id/7564/1 Linux Magazine article], [http://www.phoronix.com/scan.php?page=article&item=linux_iosched_2012 Phoronix benchmark] and {{Bug|22605}}.<br />
<br />
The CFQ scheduler is enabled by default on Arch. Verify this by viewing the contents {{ic|/sys/block/sdX/queue/scheduler}}:<br />
$ cat /sys/block/sdX/queue/scheduler<br />
noop deadline [cfq]<br />
The scheduler currently in use is denoted from the available schedulers by the brackets. <br />
<br />
===== Kernel parameter (for a single device) =====<br />
If the sole storage device in the system is an SSD, consider setting the I/O scheduler for the entire system via the {{ic|1=elevator=noop}} kernel parameter. See [[Kernel parameters]] for more info.<br />
Additional infrequently used hard drives can be set to use the cfq scheduler with the method explained below.<br />
Replace 'noop' with 'cfq' and the array of SSDs with your hard drives to achieve this effect.<br />
<br />
===== Using the sys virtual filesystem (for multiple devices) =====<br />
This method is preferred when the system has several physical storage devices (for example an SSD and an HDD).<br />
Add the following line in {{ic|/etc/rc.local}}:<br />
echo noop > /sys/block/sdX/queue/scheduler<br />
where X is the letter for the SSD device.<br />
<br />
Because of the potential for udev to assign different {{ic|/dev/}} nodes to drives before and after a kernel update, users must take care that the NOOP scheduler is applied to the correct device upon boot. One way to do this is by using the SSD's device ID to determine its {{ic|/dev/}} node. To do this automatically, use the following snippet instead of the line above and add it to {{ic|/etc/rc.local}}:<br />
declare -ar SSDS=(<br />
'scsi-SATA_SAMSUNG_SSD_PM8_S0NUNEAB861972'<br />
'ata-SAMSUNG_SSD_PM810_2.5__7mm_256GB_S0NUNEAB861972'<br />
)<br />
<br />
for SSD in "${SSDS[@]}" ; do<br />
BY_ID=/dev/disk/by-id/$SSD<br />
<br />
if &#91;&#91; -e $BY_ID ]] ; then<br />
DEV_NAME=`ls -l $BY_ID | awk '{ print $NF }' | sed -e 's/[/\.]//g'`<br />
SCHED=/sys/block/$DEV_NAME/queue/scheduler<br />
<br />
if &#91;&#91; -w $SCHED ]] ; then<br />
echo noop > $SCHED<br />
fi<br />
fi<br />
done<br />
where {{ic|SSDS}} is a Bash array containing the device IDs of all SSD devices. Device IDs are listed in {{ic|/dev/disk/by-id/}} as symbolic links pointing to their corresponding {{ic|/dev/}} nodes. To view the links listed with their targets, issue the following command:<br />
ls -l /dev/disk/by-id/<br />
<br />
=====Using udev for one device or HDD/SSD mixed environment=====<br />
Though the above will undoubtedly work, it is probably considered a reliable workaround. It should also be noted that with the move to [[systemd]] there will be no rc.local. Ergo, it would be preferred to use the system that is responsible for the devices in the first place to implement the scheduler. In this case it is udev, and to do this, all one needs is a simple [[udev]] rule.<br />
<br />
To do this, create and edit a file in /etc/udev/rules.d named something like '60-schedulers.rules'. In the file include the following:<br />
# set deadline scheduler for non-rotating disks<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"<br />
<br />
# set cfq scheduler for rotating disks<br />
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"<br />
Of course, set deadline/cfq to the desired schedulers. Changes should occur upon next boot. To check success of your new rule do<br />
$ cat /sys/block/sdX/queue/scheduler #where X is the device in question<br />
{{note|Keep in mind cfq is the default scheduler, so the second rule with the standard kernel is not actually necessary. Also, in the example sixty is chosen because that is the number udev uses for its own persistent naming rules. Thus, it would seem that block devices are at this point able to be modified and this is a safe position for this particular rule. But the rule can be named anything you desire so long as it ends in '.rules'. (Credit: falconindy and w0ng for posting on his blog)}}<br />
<br />
=== Swap Space on SSDs ===<br />
One can place a swap partition on an SSD. Note that most modern desktops with an excess of 2 Gigs of memory rarely use swap at all. The notable exception is systems which make use of the hibernate feature. The following is recommended tweak for SSDs using a swap partition that will reduce the "swappiness" of the system thus avoiding writes to swap:<br />
<br />
# echo 1 > /proc/sys/vm/swappiness<br />
<br />
Or one can simply modify {{ic|/etc/sysctl.conf}} as recommended in the [[Maximizing_performance#Swappiness|Maximizing Performance]] wiki article:<br />
<br />
vm.swappiness=1<br />
vm.vfs_cache_pressure=50<br />
<br />
=== SSD Memory Cell Clearing ===<br />
On occasion, users may wish to completely reset an SSD's cells to the same virgin state they were at the time he/she installed the device thus restoring it to its [http://www.anandtech.com/storage/showdoc.aspx?i=3531&p=8 factory default write performance]. Write performance is known to degrade over time even on SSDs with native TRIM support. TRIM only safeguards against file deletes, not replacements such as an incremental save.<br />
<br />
The reset is easily accomplished in a three step procedure denoted on the [[SSD Memory Cell Clearing]] wiki article.<br />
<br />
==Tips for Minimizing SSD Read/Writes==<br />
An overarching theme for SSD usage should be 'simplicity' in terms of locating high-read/write operations either in RAM (Random Access Memory) or on a physical HDD rather than on an SSD. Doing so will add longevity to an SSD. This is primarily due to the large erase block size (512 KiB in some cases); a lot of small writes result in huge effective writes.<br />
<br />
{{Note|A 32GB SSD with a mediocre 10x write amplification factor, a standard 10000 write/erase cycle, and '''10GB of data written per day''', would get an '''8 years life expectancy'''. It gets better with bigger SSDs and modern controllers with less write amplification.}}<br />
<br />
Use {{ic|iotop -oPa}} and sort by disk writes to see how much programs are writing to disk.<br />
<br />
=== Intelligent Partition Scheme ===<br />
For older, cheap or otherwise poor SSDs consider relocating the {{ic|/var}} partition to a physical disc on the system rather than on the SSD itself to avoid read/write wear. For a modern good quality SSD it is recommended to keep {{ic|/var}} on the SSD, since it's one of the most active partitions on linux and depends heavily on the speed of the disk. {{ic|/tmp}} has been mounted as {{ic|tmpfs}} on Arch since July 2011, meaning it is located in RAM instead of the disk.<br />
<br />
If the SSD is the only storage device on the system (i.e. no HDDs), consider allocating a separate partition for {{ic|/var}} to allow for better crash recovery for example in the event of a broken program wasting all the space on {{ic|/}} or if some run away log file maxes out the space, etc.<br />
<br />
=== The noatime Mount Flag ===<br />
Assign the {{ic|noatime}} flag to partitions residing on SSDs. See the [[#Mount_Flags|Mount Flags]] section below for more.<br />
<br />
=== Locate High-Use Files to RAM ===<br />
==== Browser Profiles ====<br />
One can ''easily'' mount browser profile(s) such as chromium, firefox, opera, etc. into RAM via tmpfs and also use rsync to keep them synced with HDD-based backups. In addition to the obvious speed enhancements, users will also save read/write cycles on their SSD by doing so.<br />
<br />
The AUR contains several packages to automate this process, for example {{AUR|profile-sync-daemon}}.<br />
<br />
==== Others ====<br />
For the same reasons a browser's profile can be relocated to RAM, so can highly used directories such as {{ic|/srv/http}} (if running a web server). A sister project to {{AUR|profile-sync-daemon}} is {{AUR|anything-sync-daemon}}, which allows users to define '''any''' directory to sync to RAM using the same underlying logic and safe guards.<br />
<br />
{{Warning|Do NOT attempt to add /var/log to anything-sync-daemon. Systemd gets really pissed if you do.}}<br />
<br />
=== Compiling in tmpfs ===<br />
Intentionally compiling in {{ic|/tmp}} is a great idea to minimize this problem. For systems with >4 GB of memory, the tmp line in {{ic|/etc/fstab}} can be tweaked to use more than 1/2 the physical memory on the system via the {{ic|1=size=}} flag as {{ic|/tmp}} keeps filling up.<br />
<br />
Example of a machine with 8 GB of physical memory:<br />
tmpfs /tmp tmpfs nodev,nosuid,size=7G 0 0<br />
<br />
=== Disabling Journaling on the filesystem ===<br />
Using a journaling filesystem such as ext3 or ext4 on an SSD WITHOUT a journal is an option to decrease read/writes. The obvious drawback of using a filesystem with journaling disabled is data loss as a result of an ungraceful dismount (i.e. post power failure, kernel lockup, etc.). With modern SSDs, [http://tytso.livejournal.com/61830.html Ted Tso] advocates that journaling can be enabled with minimal extraneous read/write cycles under most circumstances:<br />
<br />
'''Amount of data written (in megabytes) on an ext4 file system mounted with noatime.'''<br />
{| border="1" cellpadding="5"<br />
! operation !! journal !! w/o journal !! percent change<br />
|-<br />
!git clone<br />
|367.0<br />
|353.0<br />
|3.81 %<br />
|-<br />
!make<br />
|207.6<br />
|199.4<br />
|3.95 %<br />
|-<br />
!make clean<br />
|6.45<br />
|3.73<br />
|42.17 %<br />
|}<br />
<br />
''"What the results show is that metadata-heavy workloads, such as make clean, do result in almost twice the amount data written to disk. This is to be expected, since all changes to metadata blocks are first written to the journal and the journal transaction committed before the metadata is written to their final location on disk. However, for more common workloads where we are writing data as well as modifying filesystem metadata blocks, the difference is much smaller."''<br />
<br />
{{Note|The make clean example from the table above typifies the importance of intentionally doing compiling in tmpfs as recommended in the [[Solid_State_Drives#Compiling_in_tmpfs|preceding section]] of this article!}}<br />
<br />
=== Choice of Filesystem ===<br />
Many options exist for file systems including Ext2/3/4, Btrfs, etc.<br />
<br />
==== Btrfs ====<br />
[http://en.wikipedia.org/wiki/Btrfs Btrfs] support has been included with the mainline 2.6.29 release of the Linux kernel. Some feel that it is not mature enough for production use while there are also early adopters of this potential successor to ext4. Users are encouraged to read the [[Btrfs]] article for more info.<br />
<br />
==== Ext4 ====<br />
[http://en.wikipedia.org/wiki/Ext4 Ext4] is another filesystem that has support for SSD. It is considered as stable since 2.6.28 and is mature enough for daily use. Contrary to Btrfs, ext4 does not automatically detect the disk nature; users must explicitly enable the TRIM command support using the {{ic|discard}} mount option in [[fstab]] (or with {{ic|tune2fs -o discard /dev/sdaX}}).<br />
See the [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/filesystems/ext4.txt official in kernel tree documentation] for further information on ext4.<br />
<br />
== SSD Benchmarking ==<br />
See the [[SSD Benchmarking]] article for a general process of benchmarking SSDs or to see some of the SSDs in the database.<br />
<br />
== Firmware Updates ==<br />
=== OCZ ===<br />
OCZ has a command line utility available for Linux (i686 and x86_64) on their forum [http://www.ocztechnology.com/ssd_tools/ here].<br />
<br />
== See also ==<br />
* [http://www.reddit.com/r/archlinux/comments/rkwjm/what_should_i_keep_in_mind_when_installing_on_ssd/ Discussion on Reddit about installing Arch on an SSD]</div>TrueBershttps://wiki.archlinux.org/index.php?title=Font_configuration&diff=221763Font configuration2012-09-06T16:38:39Z<p>TrueBers: changed deprecated config files and dirs</p>
<hr />
<div>[[Category:Fonts]]<br />
[[it:Font Configuration]]<br />
[[ru:Font Configuration]]<br />
[[sr:Font Configuration]]<br />
[[tr:Yazıtipi_yapılandırması]]<br />
[[zh-CN:Font Configuration]]<br />
{{Article summary start}}<br />
{{Article summary text|An overview of font configuration options and various techniques for improving the readability of fonts}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Fonts}}: Information on adding fonts and font recommendations<br />
{{Article summary wiki|Java Runtime Environment Fonts}}: Fonts specific to Sun's Java machine<br />
{{Article summary wiki|MS Fonts}}: Adding Microsoft fonts and mimicking Windows' font settings<br />
{{Article summary wiki|Font Configuration/fontconfig Examples}}<br />
{{Article summary end}}<br />
<br />
Fontconfig is a library designed to provide a list of available [[fonts]] to applications, and also for configuration for how fonts get rendered. See package {{Pkg|fontconfig}} and [[Wikipedia:Fontconfig]]. The Free type library ({{Pkg|freetype2}} package) renders the fonts, based on this configuration.<br />
<br />
Though Fontconfig is the standard in today's Linux, some applications still rely on the original method of font categorization: the Xorg server configuration.<br />
<br />
The font rendering packages on Arch Linux includes support for ''freetype2'' with the bytecode interpreter (BCI) enabled. Patched packages exist for better font rendering, especially with an LCD monitor. See [[#Patched packages]] below. The [[#Infinality]] package allows both auto-hinting and subpixel rendering, allows the LCD filter to be tweaked without recompiling, and allows the auto-hinter to work well with bold fonts.<br />
<br />
==Font paths==<br />
<br />
For fonts to be known to applications, they must be cataloged for easy and quick access.<br />
<br />
The font paths initially known to Fontconfig are: {{ic|/usr/share/fonts/}} and {{ic|~/.fonts/}} (of which Fontconfig will scan recursively). For ease of organization and installation, it is recommended to use these font paths when [[Fonts#Installation|adding fonts]].<br />
<br />
To see a list of known Fontconfig fonts in an easy to read format:<br />
$ fc-list | sed 's,:.*,,' | sort -u<br />
<br />
Check for Xorg's known font paths by reviewing its log:<br />
$ grep /fonts /var/log/Xorg.0.log<br />
<br />
{{Tip|You can also check the list of [[Xorg]]'s known font paths using the command {{ic|xset q}}.}}<br />
<br />
Keep in mind that Xorg does not search recursively through the {{ic|/usr/share/fonts/}} directory like Fontconfig does. To add a path, the full path must be used:<br />
Section "Files"<br />
FontPath "/usr/share/fonts/local/"<br />
EndSection<br />
<br />
If you want font paths to be set on a per-user basis, you can add and remove font paths from the default by adding the following line(s) to {{ic|~/.xinitrc}}:<br />
xset +fp /usr/share/fonts/local/ # Prepend a custom font path to Xorg's list of known font paths<br />
xset -fp /usr/share/fonts/sucky_fonts/ # Remove the specified font path from Xorg's list of known font paths<br />
<br />
To see a list of known Xorg fonts use {{ic|xlsfonts}}, from the {{Pkg|xorg-xlsfonts}} package.<br />
<br />
==Fontconfig configuration==<br />
<br />
Fontconfig is documented in the [http://fontconfig.org/fontconfig-user.html fonts.conf] man page.<br />
<br />
Configuration can be done per-user through {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}, and globally with {{ic|/etc/fonts/local.conf}}. The settings in the per-user configuration have precedence over the global configuration. Both these files use the same syntax.<br />
{{Note|Configuration files and directories: {{ic|~/.fonts.conf}}, {{ic|~/.fonts.conf.d}} and {{ic|~/.fontconfig/*.cache-*}} are now deprecated and will not be read by default in the future versions of package. Use instead {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}, {{ic|$XDG_CONFIG_HOME/fontconfig/conf.d}} and {{ic|$XDG_CACHE_HOME/fontconfig/*.cache-*}} respectively.}}<br />
<br />
Fontconfig gathers all its configurations in a central file ({{ic|/etc/fonts/fonts.conf}}). This file is replaced during fontconfig updates and shouldn't be edited. Fontconfig-aware applications source this file to know available fonts and how they get rendered. This file is a conglomeration of rules from the global configuration ({{ic|/etc/fonts/local.conf}}), the configured presets in {{ic|/etc/fonts/conf.d/}}, and the user configuration file ({{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}).<br />
<br />
{{Note|For some desktop environments (such as [[GNOME]] and [[KDE]]) using the ''Font Control Panel'' will automatically create or overwrite the user font configuration file. For these desktop environments, it is best to match your already defined font configurations to get the expected behavior.}}<br />
<br />
Fontconfig configuration files use [[Wikipedia:XML|XML]] format and need these headers:<br />
<br />
{{bc|<nowiki><br />
<?xml version="1.0"?><br />
<!DOCTYPE fontconfig SYSTEM "fonts.dtd"><br />
<fontconfig><br />
<br />
<!-- settings go here --><br />
<br />
</fontconfig><br />
</nowiki>}}<br />
<br />
The configuration examples in this article omit these tags.<br />
<br />
===Presets===<br />
<br />
There are presets installed in the directory {{ic|/etc/fonts/conf.avail}}. They can be enabled by creating [[Wikipedia:Symbolic link|symbolic link]]s to them, both per-user and globally, as described in {{ic|/etc/fonts/conf.d/README}}. These presets will override matching settings in their respective configuration files.<br />
<br />
For example, to enable sub-pixel RGB rendering globally:<br />
<br />
# cd /etc/fonts/conf.d<br />
# ln -s ../conf.avail/10-sub-pixel-rgb.conf<br />
<br />
To do the same but instead for a per-user configuration:<br />
<br />
$ mkdir $XDG_CONFIG_HOME/fontconfig/conf.d<br />
$ ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf $XDG_CONFIG_HOME/fontconfig/conf.d<br />
<br />
===Anti-aliasing===<br />
<br />
[[Wikipedia:Font rasterization|Font rasterization]] converts vector font data to bitmap data so that it can be displayed. The result can appear jagged due to [[Wikipedia:Aliasing|aliasing]]. [[Wikipedia:Anti-aliasing|anti-aliasing]] is enabled by default and increases the apparent resolution of font edges.<br />
<br />
{{bc|<nowiki><br />
<match target="font"><br />
<edit name="antialias" mode="assign"><br />
<bool>true</bool><br />
</edit><br />
</match><br />
</nowiki>}}<br />
<br />
===Hinting===<br />
<br />
[[Wikipedia:Font hinting|Font hinting]] (also known as instructing) is the use of mathematical instructions to adjust the display of an outline font so that it lines up with a rasterized grid, such as the pixel grid in a display. Fonts will not line up correctly without hinting until displays have 300 [[Wikipedia:Dots per inch|DPI]] or greater. Two types of hinting are available.<br />
<br />
====Byte-Code Interpreter (BCI)====<br />
Using normal hinting, TrueType hinting instructions in the font are interpreted by freetype's Byte-Code Interpreter. This works best for fonts with good hinting instructions.<br />
<br />
To enable normal hinting:<br />
<br />
{{bc|<nowiki><br />
<match target="font"><br />
<edit name="hinting" mode="assign"><br />
<bool>true</bool><br />
</edit><br />
</match><br />
</nowiki>}}<br />
<br />
====Autohinter====<br />
Auto-discovery for hinting. This looks worse than normal hinting for fonts with good instructions, but better for those with poor or no instructions. The autohinter and subpixel rendering are not designed to work together and should not be used in combination.<br />
<br />
To enable auto-hinting:<br />
<br />
{{bc|<nowiki><br />
<match target="font"><br />
<edit name="autohint" mode="assign"><br />
<bool>true</bool><br />
</edit><br />
</match><br />
</nowiki>}}<br />
<br />
====Hint style====<br />
<br />
Hint style is the amount of influence the hinting mode has. Hinting can be set to: {{ic|hintfull}}, {{ic|hintmedium}}, {{ic|hintslight}} and {{ic|hintnone}}. With BCI hinting, hintfull should work best for most fonts. With the autohinter, hintslight is recommended.<br />
<br />
{{bc|<nowiki><br />
<match target="font"><br />
<edit name="hintstyle" mode="assign"><br />
<const>hintfull</const><br />
</edit><br />
</match><br />
</nowiki>}}<br />
<br />
===Subpixel rendering===<br />
<br />
Subpixel rendering effectively triples the horizontal (or vertical) resolution for fonts by making use of subpixels. The autohinter and subpixel rendering are not designed to work together and should not be used in combination without the [[#Infinality]] patch set.<br />
<br />
Most monitors manufactured today use the Red, Green, Blue (RGB) specification. Fontconfig will need to know your monitor type to be able to display your fonts correctly.<br />
<br />
''RGB (most common), BGR, V-RGB (vertical), or V-BGR''<br />
<br />
To enable subpixel rendering:<br />
<br />
{{bc|<nowiki><br />
<match target="font"><br />
<edit name="rgba" mode="assign"><br />
<const>rgb</const><br />
</edit><br />
</match><br />
</nowiki>}}<br />
<br />
If you notice unusual colors around font's borders, the wrong subpixel arrangement might be configured. The [http://www.lagom.nl/lcd-test/subpixel.php Lagom subpixel layout test] web page can help identify it.<br />
<br />
====LCD filter====<br />
<br />
When using subpixel rendering, you should enable the LCD filter, which is designed to reduce colour fringing. This is described under [http://www.freetype.org/freetype2/docs/reference/ft2-lcd_filtering.html LCD filtering] in the FreeType 2 API reference. Different options are described under [http://www.freetype.org/freetype2/docs/reference/ft2-lcd_filtering.html#FT_LcdFilter FT_LcdFilter], and are illustrated by this [http://www.spasche.net/files/lcdfiltering/ LCD filter test] page.<br />
<br />
The {{ic|lcddefault}} filter will work for most users. Other filters are available that can be used in special situations: {{ic|lcdlight}}; a lighter filter ideal for fonts that look too bold or fuzzy, {{ic|lcdlegacy}}, the original Cairo filter; and {{ic|lcdnone}} to disable it entirely.<br />
<br />
{{bc|<nowiki><br />
<match target="font"><br />
<edit mode="assign" name="lcdfilter"><br />
<const>lcddefault</const><br />
</edit><br />
</match><br />
</nowiki>}}<br />
<br />
====Advanced LCD filter specification====<br />
<br />
If the available, built-in LCD filters are not satisfactory, it is possible to tweak the font rendering very specifically by building a custom freetype2 package and modifying the hardcoded filters. The [[Arch Build System]] can be used to build and install packages from source.<br />
<br />
First, refresh the freetype2 PKGBUILD as root:<br />
<br />
# abs extra/freetype2<br />
<br />
This example uses {{ic|/var/abs/build}} as the build directory, substitute it according to your personal ABS setup. Download and extract the freetype2 package as a regular user:<br />
<br />
$ cd /var/abs/build<br />
$ cp -r ../extra/freetype2 .<br />
$ cd freetype2<br />
$ makepkg -o<br />
<br />
Edit the file {{ic|src/freetype-VERSION/src/base/ftlcdfil.c}} and look up the definition of the constant {{ic|default_filter[5]}}:<br />
<br />
static const FT_Byte default_filter[5] =<br />
{ 0x10, 0x40, 0x70, 0x40, 0x10 };<br />
<br />
This constant defines a low-pass filter applied to the rendered glyph. Modify it as needed. Save the file, build and install the custom package:<br />
<br />
$ makepkg -e<br />
$ sudo pacman -Rd freetype2<br />
$ sudo pacman -U freetype2-VERSION-ARCH.pkg.tar.xz<br />
<br />
Reboot or restart X. The lcddefault filter should now render fonts differently.<br />
<br />
===Disable auto-hinter for bold fonts===<br />
<br />
The auto-hinter uses sophisticated methods for font rendering, but often makes bold fonts too wide. Fortunately, a solution can be turning off the autohinter for bold fonts while leaving it on for the rest:<br />
...<br />
<match target="font"><br />
<test name="weight" compare="more"><br />
<const>medium</const><br />
</test><br />
<edit name="autohint" mode="assign"><br />
<bool>false</bool><br />
</edit><br />
</match><br />
...<br />
<br />
=== Enable anti-aliasing only for bigger fonts ===<br />
<br />
''See also [http://sharpfonts.co.cc/ sharpfonts.co.cc] for related information.''<br />
<br />
Some users prefer the sharper rendering that anti-aliasing does not offer:<br />
<br />
{{bc|<nowiki><br />
...<br />
<match target="font"><br />
<edit name="antialias" mode="assign"><br />
<bool>false</bool><br />
</edit><br />
</match><br />
<br />
<match target="font" ><br />
<test name="size" qual="any" compare="more"><br />
<double>12</double><br />
</test><br />
<edit name="antialias" mode="assign"><br />
<bool>true</bool><br />
</edit><br />
</match><br />
<br />
<match target="font" ><br />
<test name="pixelsize" qual="any" compare="more"><br />
<double>16</double><br />
</test><br />
<edit name="antialias" mode="assign"><br />
<bool>true</bool><br />
</edit><br />
</match><br />
...<br />
</nowiki>}}<br />
<br />
===Replace fonts===<br />
<br />
The most reliable way to do this is to add an XML fragment similar to the one below. This will cause Bitstream Vera Sans to be used in place of Helvetica:<br />
...<br />
<match target="pattern" name="family" ><br />
<test name="family" qual="any" ><br />
<string>Helvetica</string><br />
</test><br />
<edit name="family" mode="assign"><br />
<string>Bitstream Vera Sans</string><br />
</edit><br />
</match><br />
...<br />
An alternate approach is to set the "preferred" font, but ''this only works if the original font is not on the system'', in which case the one specified will be substituted:<br />
...<br />
< !-- Replace Helvetica with Bitstream Vera Sans Mono --><br />
< !-- Note, an alias for Helvetica should already exist in default conf files --><br />
<alias><br />
<family>Helvetica</family><br />
<prefer><family>Bitstream Vera Sans Mono</family></prefer><br />
<default><family>fixed</family></default><br />
</alias><br />
...<br />
<br />
===Disable bitmap fonts===<br />
<br />
To disable bitmap fonts in fontconfig, use {{ic|70-no-bitmaps.conf}} (which is not placed by fontconfig by default):<br />
<br />
# cd /etc/fonts/conf.d<br />
# rm 70-yes-bitmaps.conf<br />
# ln -s ../conf.avail/70-no-bitmaps.conf<br />
<br />
You may not need to remove {{ic|70-yes-bitmaps.conf}} if it does not exist. You can choose which fonts to replace bitmaps fonts with (Helvetica, Courier and Times bitmap mapts to TTF fonts) by:<br />
<br />
# cd /etc/fonts/conf.d<br />
# ln -s ../conf.avail/29-replace-bitmap-fonts.conf<br />
<br />
To disable embedded bitmap fonts for a specific font:<br />
<br />
<match target="font"><br />
<test qual="any" name="family"><br />
<string>Monaco</string><br />
</test><br />
<edit name="embeddedbitmap"><bool>false</bool></edit><br />
</match><br />
<br />
===Create bold and italic styles for incomplete fonts===<br />
<br />
Freetype has the ability to automatically create ''italic'' and '''bold''' styles for fonts that do not have them, but only if explicitly required by the application. Given programs rarely send these requests, this section covers manually forcing generation of missing styles.<br />
<br />
Start by editing {{ic|/usr/share/fonts/fonts.cache-1}} as explained below. Store a copy of the modifications on another file, because a font update with {{ic|fc-cache}} will overwrite {{ic|/usr/share/fonts/fonts.cache-1}}.<br />
<br />
Assuming the Dupree font is installed:<br />
"dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:''etc...''<br />
<br />
Duplicate the line, change {{ic|<nowiki>style=Regular</nowiki>}} to {{ic|<nowiki>style=Bold</nowiki>}} or any other style. Also change {{ic|<nowiki>slant=0</nowiki>}} to {{ic|<nowiki>slant=100</nowiki>}} for italic, {{ic|<nowiki>weight=80</nowiki>}} to {{ic|<nowiki>weight=200</nowiki>}} for bold, or combine them for '''''bold italic''''':<br />
"dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:''etc...''<br />
<br />
Now add necessary modifications to {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}:<br />
{{bc|<nowiki><br />
...<br />
<match target="font"><br />
<test name="family" qual="any"><br />
<string>Dupree</string><br />
&lt;!-- other fonts here .... --&gt;<br />
</test><br />
<test name="weight" compare="more_eq"><int>140</int></test><br />
<edit name="embolden" mode="assign"><bool>true</bool></edit><br />
</match><br />
<br />
<match target="font"><br />
<test name="family" qual="any"><br />
<string>Dupree</string><br />
&lt;!-- other fonts here .... --&gt;<br />
</test><br />
<test name="slant" compare="more_eq"><int>80</int></test><br />
<edit name="matrix" mode="assign"><br />
<times><br />
<name>matrix</name><br />
<matrix><br />
<double>1</double><double>0.2</double><br />
<double>0</double><double>1</double><br />
</matrix><br />
</times><br />
</edit><br />
</match><br />
...<br />
</nowiki>}}<br />
{{Tip| Use the value 'embolden' for existing bold fonts in order to make them even bolder.}}<br />
<br />
===Change rule overriding===<br />
<br />
Fontconfig processes files in {{ic|/etc/fonts/conf.d}} in reverse numerical order. This enables rules or files to override one another, but often confuses users about what file gets parsed last.<br />
<br />
To guarantee that personal settings take precedence over any other rules, change their ordering:<br />
# cd /etc/fonts/conf.d<br />
# mv 50-user.conf 00-user.conf<br />
<br />
This change seems however to be unnecessary for the most of the cases, because a user is given enough control by default to set up own font preferences, hinting and antialiasing properties, alias new fonts to generic font families, etc.<br />
<br />
===Example fontconfig configurations===<br />
<br />
Example fontconfig configurations can be found on this [[Font_Configuration/fontconfig_Examples|page]].<br />
<br />
A simple starting point:<br />
<br />
{{hc|/etc/fonts/local.conf|<nowiki><br />
<?xml version='1.0'?><br />
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'><br />
<fontconfig><br />
<match target="font"><br />
<br />
<edit mode="assign" name="rgba"><br />
<const>rgb</const><br />
</edit><br />
<br />
<edit mode="assign" name="hinting"><br />
<bool>true</bool><br />
</edit><br />
<br />
<edit mode="assign" name="hintstyle"><br />
<const>hintfull</const><br />
</edit><br />
<br />
<edit mode="assign" name="antialias"><br />
<bool>true</bool><br />
</edit><br />
<br />
<edit mode="assign" name="lcdfilter"><br />
<const>lcddefault</const><br />
</edit><br />
<br />
</match><br />
</fontconfig><br />
</nowiki>}}<br />
<br />
==Patched packages==<br />
<br />
These patched packages are available in the [[Arch User Repository|AUR]]. A few considerations:<br />
<br />
* Configuration is usually necessary.<br />
* The new font rendering will not kick in until applications restart.<br />
* Applications which [[Wikipedia:Static library|statically link]] to a library will not be affected by patches applied to the system library.<br />
<br />
=== ClearType packages ===<br />
<br />
These packages attempt to emulate ClearType, a type of font rendering that is used in Windows systems and is designed to work on both LCD and CRT monitors.<br />
<br />
Install the patched packages from the [[Arch User Repository|AUR]]. Package names: {{AUR|freetype2-cleartype}} {{AUR|libxft-cleartype}} {{AUR|cairo-cleartype}}<br />
<br />
===Infinality===<br />
{{Warning|1=Since the [http://www.archlinux.org/news/fontconfig-2101-update-manual-intervention-required/ Fontconfig 2.10.1 update], Infinality users will receive multiple warnings similar to:<br />
{{ic|Fontconfig warning: "/etc/fonts/infinality/conf.d/60-group-non-tt-fonts.conf", line 483: Having multiple values in <test> isn't supported and may not works as expected}}<br />
Rule adjustments are currently being worked on. See: [http://www.infinality.net/forum/viewtopic.php?f=2&t=254 this article] for more information.}}<br />
<br />
The infinality patchset aims to greatly improve freetype2 font rendering. It adds multiple new capabilities.<br />
<br />
*[http://www.infinality.net/blog/infinality-freetype-patches/ Home page].<br />
*[http://www.infinality.net/forum/ Forum].<br />
<br />
Infinality's settings are all configurable at runtime via environment variables in {{ic|/etc/profile.d/infinality-settings.sh}}, and include the following:<br />
<br />
*'''Emboldening Enhancement''': Disables Y emboldening, producing a much nicer result on fonts without bold versions. Works on native TT hinter and autohinter.<br />
*'''Auto-Autohint''': Automatically forces autohint on fonts that contain no TT instructions.<br />
*'''Autohint Enhancement''': Makes autohint snap horizontal stems to pixels. Gives a result that appears like a well-hinted truetype font, but is 100% patent-free (as far as I know).<br />
*'''Customized FIR Filter''': Select your own [http://www.infinality.net/forum/viewtopic.php?f=2&t=19 filter values] at run-time. Works on native TT hinter and autohinter.<br />
*'''Stem Alignment''': Aligns bitmap glyphs to optimized pixel boundaries. Works on native TT hinter and autohinter.<br />
*'''Pseudo Gamma Correction''': Lighten and darken glyphs at a given value, below a given size. Works on native TT hinter and autohinter.<br />
*'''Embolden Thin Fonts''': Embolden thin or light fonts so that they are more visible. Works on autohinter.<br />
*'''Force Slight Hinting''': Force slight hinting even when programs want full hinting. If you use the local.conf I provide (included in infinality-settings fedora package) you will notice nice improvements on @font-face fonts.<br />
*'''ChromeOS Style Sharpening''': ChromeOS uses a patch to sharpen the look of fonts. This is now included in the infinality patchset.<br />
<br />
A number of presets are included and can be used by setting the USE_STYLE variable in {{ic|/etc/profile.d/infinality-settings.sh}}.<br />
<br />
{{AUR|freetype2-infinality}} can be installed from the [[Arch User Repository|AUR]]. Additionally, if you are using {{pkg|lib32-freetype2}} from [multilib], replace it with {{AUR|lib32-freetype2-infinality}} from the AUR. The AUR also contains a Git version of freetype2 that builds the latest development snapshot of freetype2 with the Infinality patchset: {{AUR|freetype2-git-infinality}}, {{AUR|lib32-freetype2-git-infinality}}.<br />
<br />
It is recommended to also install {{AUR|fontconfig-infinality}} to enable selection of predefined font substitution styles and antialiasing settings, apart from the rendering settings of the engine itself. After doing so, you can select the font style (win7, winxp, osx, linux, ...) with:<br />
# infctl setstyle<br />
<br />
If you set e.g. win7 or osx you need the corresponding fonts installed.<br />
<br />
{{Note|Default infinality settings can cause some programs to display fonts at 72 DPI instead of 96. If you notice a problem open /etc/fonts/infinality/infinality.conf search for the section on DPI and change 72 to 96. This problem can specifically affect conky causing the fonts to appear smaller than they should. Thus not aligning properly with images. }}<br />
<br />
{{Note|''The README for {{AUR|fontconfig-infinality}} says that /etc/fonts/local.conf should either not exist, or have no infinality-related configurations in it. The local.conf is now obsolete and completely replaced by this configuration.''}}<br />
<br />
for more information see this article: http://www.infinality.net/forum/viewtopic.php?f=2&t=77<br />
<br />
===Ubuntu===<br />
<br />
Ubuntu adds extra configurations, and occasionally patches to the font rendering libraries.<br />
<br />
Install the patched packages from the [[Arch User Repository|AUR]], the package names are: {{AUR|freetype2-ubuntu}} {{AUR|fontconfig-ubuntu}} {{AUR|libxft-ubuntu}} {{AUR|cairo-ubuntu}}.<br />
<br />
The global configuration will need to be added. See [[#Example fontconfig configurations]] for a starting point.<br />
<br />
===Reverting to unpatched packages===<br />
<br />
To restore the unpatched packages, reinstall the originals:<br />
<br />
# pacman -S --asdeps freetype2 libxft cairo fontconfig<br />
<br />
==Applications without fontconfig support==<br />
<br />
Some applications like [[URxvt]] will ignore fontconfig settings. This is very apparent when using the infinality patches which are heavily reliant on proper configuration. You can work around this by using {{ic|~/.Xresources}}, but it is not nearly as flexible as fontconfig. Example (see [[#Fontconfig configuration]] for explanations of the options):<br />
<br />
{{hc|~/.Xresources|<nowiki><br />
Xft.autohint: 0<br />
Xft.lcdfilter: lcddefault<br />
Xft.hintstyle: hintfull<br />
Xft.hinting: 1<br />
Xft.antialias: 1<br />
Xft.rgba: rgb<br />
</nowiki>}}<br />
<br />
Make sure the settings are loaded properly when X starts with {{ic|xrdb -q}} (see [[Xresources]] for more information).<br />
<br />
==Troubleshooting==<br />
<br />
===Distorted fonts===<br />
{{Note|96 DPI is not a standard. You should use your monitor's actual DPI to get proper font rendering, especially when using subpixel rendering.}}<br />
<br />
If fonts are still unexpectedly large or small, poorly proportioned or simply rendering poorly, fontconfig may be using the incorrect DPI.<br />
<br />
Fontconfig should be able to detect DPI parameters as discovered by the Xorg server. You can check the automatically discovered DPI with {{ic|xdpyinfo}}:<br />
<br />
{{hc|<nowiki>$ xdpyinfo | grep dots</nowiki>| resolution: 102x102 dots per inch}}<br />
<br />
{{Note|To use the ''xdpyinfo'' command, you must install the package {{pkg|xorg-xdpyinfo}}.}}<br />
<br />
If the DPI is detected incorrectly (usually due to an incorrect monitor EDID), you can specify it manually in the Xorg configuration, see [[Xorg#Display Size and DPI]]. This is the recommended solution, but it may not work with buggy drivers.<br />
<br />
Fontconfig will default to the Xft.dpi variable if it is set. Xft.dpi is usually set by desktop environments (usually to Xorg's DPI setting) or manually in {{ic|~/.Xdefaults}} or {{ic|~/.Xresources}}. Use xrdb to query for the value:<br />
<br />
{{hc|<nowiki>$ xrdb -query | grep dpi</nowiki>|Xft.dpi: 102}}<br />
<br />
Those still having problems can fall back to manually setting the DPI used by fontconfig:<br />
<br />
...<br />
<!-- Setup for DPI=96 --><br />
<match target="pattern"><br />
<edit name="dpi" mode="assign"><double>102</double></edit><br />
</match><br />
...<br />
<br />
===Older GTK and QT applications===<br />
<br />
Modern GTK apps enable Xft by default but this was not the case before version 2.2. If it is not possible to update these applications, force Xft for old [[GNOME]] applications by adding to {{ic|~/.bashrc}}:<br />
<br />
export GDK_USE_XFT=1<br />
<br />
For older QT applications:<br />
<br />
export QT_XFT=true<br />
<br />
==See also==<br />
*[http://www.x.org/X11R6.8.2/doc/fonts.html Fonts in X11R6.8.2] - Official Xorg font information<br />
*[http://freetype.sourceforge.net/freetype2/ FreeType 2 Overview]<br />
*[https://forums.gentoo.org/viewtopic-t-723341.html Gentoo font-rendering thread]</div>TrueBershttps://wiki.archlinux.org/index.php?title=Fonts&diff=189617Fonts2012-03-16T06:08:20Z<p>TrueBers: </p>
<hr />
<div>[[Category:Fonts (English)]]<br />
[[Category:Graphics and desktop publishing (English)]]<br />
{{i18n|Fonts}}<br />
{{expansion}}<br />
<br />
{{Article summary start}}<br />
{{Article summary text|Covers the selection and installation of fonts on Arch Linux}}<br />
{{Article summary heading|Legal}}<br />
{{Article summary text|Certain font licenses may impose some legal limitations}}<br />
{{Article summary heading|Related}}<br />
{{Article summary wiki|Font Configuration}}: Font setup and beautification<br />
{{Article summary wiki|Java Runtime Environment Fonts}}: Fonts specific to Sun's Java machine<br />
{{Article summary wiki|MS Fonts}}: Adding Microsoft fonts and mimicking Windows' font settings<br />
{{Article summary end}}<br />
<br />
== Font formats ==<br />
<br />
Most computer fonts used today are in either ''bitmap'' or ''outline'' data formats. Bitmap fonts store fixed images for each glyph in each typeface and point size. Outline or ''vector'' fonts store characters as instructions for drawing each glyph's lines and curves. Outline fonts scale smoothly in size over a wide range.<br />
<br />
Common font filename extensions include:<br />
<br />
* {{ic|bdf}} and {{ic|bdf.gz}} – bitmap fonts, ''b''itmap ''d''istribution ''f''ormat and gzip compressed {{ic|bdf}}<br />
* {{ic|pcf}} and {{ic|pcf.gz}} – bitmaps, ''p''ortable ''c''ompiled ''f''ont and gzip compressed {{ic|pcf}}<br />
* {{ic|psf}}, {{ic|psfu}}, {{ic|psf.gz}} and {{ic|psfu.gz}} – bitmaps, ''P''C ''s''creen ''f''ont, ''P''C ''s''creen ''f''ont ''U''nicode and the gzipped versions (not compatible with Xorg)<br />
* {{ic|pfa}} and {{ic|pfb}} – outline fonts, ''P''ostScript ''f''ont ''A''SCII and ''P''ostScript ''f''ont ''b''inary. PostScript fonts carry built-in printer instructions.<br />
* {{ic|ttf}} – outline, ''T''rue''T''ype ''f''ont. Originally designed as a replacement for the PostScript fonts.<br />
* {{ic|otf}} – outline, ''O''pen''T''ype ''f''ont. TrueType with PostScript typographic instructions.<br />
<br />
For most purposes, the technical differences between TrueType and OpenType can be ignored, some fonts with a {{ic|ttf}} extension are actually OpenType fonts.<br />
<br />
=== Other formats ===<br />
<br />
The typesetting application, ''TeX,'' and its companion font software, ''Metafont,'' render characters using their own methods. Some of the file extensions used for fonts by these two programs are {{ic|*pk}}, {{ic|*gf}}, {{ic|mf}} and {{ic|vf}}.<br />
<br />
''FontForge,'' a font editing application, can store fonts in its native text-based format, {{ic|sfd}}, ''s''pline ''f''ont ''d''atabase.<br />
<br />
== Installation ==<br />
<br />
Various methods of installing fonts.<br />
<br />
=== Pacman ===<br />
<br />
Fonts and font collections in the enabled repositories can be installed using [[Pacman|pacman]]. Available fonts may be found by using:<br />
$ pacman -Ss font<br />
Or to search for {{ic|ttf}} fonts only:<br />
$ pacman -Ss ttf<br />
<br />
Some fonts like <i>terminus</i> are installed in {{ic|/usr/share/fonts/local}}, which is not added to the font path by default. By adding the following lines to {{ic|~/.xinitrc}}<br />
{{bc|<br />
xset +fp /usr/share/fonts/local<br />
xset fp rehash<br />
}}<br />
the fonts can be used in X11.<br />
<br />
=== Creating a package ===<br />
<br />
If you want to give pacman the ability to manage your fonts, you can create an Arch package. These can also be shared with the community in the [[AUR]]. Here is an example of how to create a basic package. To learn more about building packages, read [[PKGBUILD]].<br />
<br />
{{bc|<nowiki><br />
pkgname=ttf-fontname<br />
pkgver=1.0<br />
pkgrel=1<br />
depends=('fontconfig' 'xorg-font-utils')<br />
pkgdesc="custom fonts"<br />
arch=('any')<br />
source=(http://someurl.org/$pkgname.tar.bz2)<br />
install=$pkgname.install<br />
<br />
build()<br />
{<br />
mkdir -p $pkgdir/usr/share/fonts/TTF<br />
cp $srcdir/$pkgname/*.ttf $pkgdir/usr/share/fonts/TTF<br />
}<br />
</nowiki>}}<br />
<br />
This PKGBUILD assumes the fonts are TrueType. An install file ({{ic|ttf-fontname.install}}) will also need to be created to update the font cache:<br />
<br />
{{bc|<nowiki><br />
post_install() {<br />
echo -n "Updating font cache... "<br />
fc-cache -fs >/dev/null<br />
mkfontscale /usr/share/fonts/TTF /usr/share/fonts/Type1<br />
mkfontdir /usr/share/fonts/TTF /usr/share/fonts/Type1<br />
echo "done"<br />
}<br />
<br />
post_upgrade() {<br />
post_install<br />
}<br />
</nowiki>}}<br />
<br />
=== Manual installation ===<br />
<br />
The recommended way of adding fonts to your system that are not in the repositories is described in [[#Creating a package]]. This gives pacman the ability to be able to remove or update them at a later time. Fonts can alternately be installed manually as well.<br />
<br />
To install fonts system-wide (available for all users), move the folder to the {{ic|/usr/share/fonts/}} directory. To install fonts for only a single user, use {{ic|~/.fonts/}} instead.<br />
<br />
Also you may need to update {{ic|/etc/X11/xorg.conf}} or {{ic|/etc/xorg.conf}} with the new directory. Search for {{ic|FontPath}} to find the correct location within the file to add your new path. See [[#Fonts with Xorg]] for more detail.<br />
<br />
Then update the fontconfig font cache:<br />
<br />
$ fc-cache -vf<br />
<br />
==== Older applications ====<br />
<br />
With older applications that do not support fontconfig (e.g. GTK1 applications, and {{ic|xfontsel}}) the index will need to be created in the font directory:<br />
<br />
$ mkfontscale<br />
$ mkfontdir<br />
<br />
Or to include more than one folder with one command:<br />
<br />
$ for dir in /font/dir1/ /font/dir2/; do xset +fp $dir; done && xset fp rehash<br />
<br />
At times the X server may fail to load the fonts directory and you will need to rescan all the {{ic|fonts.dir}} files:<br />
<br />
# xset +fp /usr/share/fonts/misc # Inform the X server of new directories<br />
# xset fp rehash # Forces a new rescan<br />
<br />
To check that the font(s) is included:<br />
<br />
$ xlsfonts | grep fontname<br />
<br />
=== Pango Warnings ===<br />
When [http://www.pango.org/ Pango] is in use on your system it will read from [http://fontconfig.org/wiki/ fontconfig] to sort out where to source fonts.<br />
<br />
(process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'<br />
(process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'<br />
<br />
If you are seeing errors similar to this and/or seeing blocks instead of characters in your application then you need to add fonts and update the font cache. This example uses the {{Pkg|ttf-liberation}} fonts to illustrate the solution and runs as root to enable them system-wide.<br />
<br />
# pacman -S ttf-liberation<br />
-- output abbreviated, assumes installation succeeded -- <br />
<br />
# fc-cache -vfs<br />
/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs<br />
/usr/share/fonts/TTF: caching, new cache contents: 16 fonts, 0 dirs<br />
/usr/share/fonts/encodings: caching, new cache contents: 0 fonts, 1 dirs<br />
/usr/share/fonts/encodings/large: caching, new cache contents: 0 fonts, 0 dirs<br />
/usr/share/fonts/util: caching, new cache contents: 0 fonts, 0 dirs<br />
/var/cache/fontconfig: cleaning cache directory <br />
fc-cache: succeeded<br />
<br />
You can test for a default font being set like so:<br />
<br />
# fc-match<br />
LiberationMono-Regular.ttf: "Liberation Mono" "Regular"<br />
<br />
=== Fonts with Xorg ===<br />
<br />
In order for [[Xorg]] to find and use your newly installed fonts, you must add the font paths to {{ic|/etc/X11/xorg.conf}} (another Xorg configuration file may work too).<br />
<br />
Here is an example of the section that must be added to {{ic|/etc/X11/xorg.conf}}. Add or remove paths based on your particular font requirements.<br />
# Let Xorg know about the custom font directories<br />
Section "Files"<br />
FontPath "/usr/share/fonts/100dpi"<br />
FontPath "/usr/share/fonts/75dpi"<br />
FontPath "/usr/share/fonts/cantarell"<br />
FontPath "/usr/share/fonts/cyrillic"<br />
FontPath "/usr/share/fonts/encodings"<br />
FontPath "/usr/share/fonts/local"<br />
FontPath "/usr/share/fonts/misc"<br />
FontPath "/usr/share/fonts/OTF"<br />
FontPath "/usr/share/fonts/TTF"<br />
FontPath "/usr/share/fonts/util"<br />
EndSection<br />
<br />
==Font packages==<br />
This is a selective list that includes many font packages from the [[AUR]] along with those in the official repositories. Fonts are tagged "Unicode" if they have wide Unicode support, see the project or Wikipedia pages for detail.<br />
<br />
===Braille===<br />
*{{Pkg|ttf-ubraille}} - Font containing Unicode symbols for ''braille''<br />
<br />
===International users===<br />
<br />
====Arabic====<br />
*{{AUR|ttf-sil-lateef}} - Unicode Arabic font from SIL ''(AUR)''<br />
*{{AUR|ttf-sil-scheherazade}} - Unicode Arabic font from SIL ''(AUR)''<br />
*{{AUR|arabeyes-fonts}} - Collection of free Arabic fonts ''(AUR)''<br />
<br />
====Chinese, Japanese, Korean, Vietnamese====<br />
<br />
=====(Mainly) Chinese=====<br />
*{{AUR|wqy-microhei}} - A Sans-Serif style high quality CJK outline font. ''(AUR)''<br />
*{{Pkg|wqy-zenhei}} - Hei Ti Style (sans-serif) Chinese Outline font embedded with bitmapped Song Ti (also supporting Japanese (partial) and Korean characters).<br />
*{{Pkg|ttf-arphic-ukai}} - ''Kaiti'' (brush stroke) Unicode font (enabling anti-aliasing is suggested)<br />
*{{Pkg|ttf-arphic-uming}} - ''Mingti'' (printed) Unicode font<br />
*{{Pkg|opendesktop-fonts}} - ''New Sung'' font, previously is ttf-fireflysung package<br />
*{{Pkg|wqy-bitmapfont}} - Bitmapped Song Ti (serif) Chinese font<br />
*{{Pkg|ttf-hannom}} - Chinese and Vietnamese TrueType font<br />
<br />
=====Japanese=====<br />
*{{AUR|otf-ipafont}} - Formal style Japanese Gothic (san-serif) and Mincho (serif) fonts set; one of the highest quality open source font. Default of openSUSE-ja. ''(AUR)''<br />
*{{AUR|ttf-vlgothic}} - Japanese Gothic fonts. Default of Debian/Fedora/Vine Linux ''(AUR)''<br />
*{{AUR|ttf-mplus}} - Modern Gothic style Japanese outline fonts. It includes all of Japanese Hiragana/Katakana, Basic Latin, Latin-1 Supplement, Latin Extended-A, IPA Extensions and most of Japanese Kanji, Greek, Cyrillic, Vietnamese with 7 weights (proportional) or 5 weights (monospace).<br />
*{{AUR|ttf-ipa-mona}}, {{AUR|ttf-monapo}} - Japanese fonts to show [http://en.wikipedia.org/wiki/2channel_Shift_JIS_art 2channel Shift JIS art] properly. ''(AUR)''<br />
*{{Pkg|ttf-sazanami}} - Japanese free TrueType font. This is outdated and not maintained any more, but may be defined as a fallback font on several environment.<br />
<br />
=====Korean=====<br />
*{{Pkg|ttf-baekmuk}} - Collection of Korean TrueType fonts<br />
*{{AUR|ttf-alee}} - Set of free Hangul TrueType fonts ''(AUR)''<br />
*{{AUR|ttf-unfonts-core}} - Un fonts (default Baekmuk fonts may be unsatisfactory) (''AUR'')<br />
<br />
====Cyrillic====<br />
''Also see [[#Monospace]], [[#Sans]] and [[#Serif]]''<br />
*{{AUR|font-arhangai}} - Mongolian Cyrillic (''AUR'')<br />
*{{AUR|ttf-pingwi-typography}} - PingWi Typography (PWT) fonts (''AUR'')<br />
<br />
====Greek====<br />
Almost all Unicode fonts contain the Greek character set (polytonic included). Some additional font packages, which might not be contain the complete Unicode set but utilize high quality Greek (and Latin, of course) typefaces are:<br />
*{{AUR|otf-gfs}} - Selection of OpenType fonts from the Greek Font Society ''(AUR)''<br />
*{{AUR|ttf-mgopen}} - Professional TrueType fonts from Magenta ''(AUR)''<br />
<br />
====Hebrew====<br />
*{{AUR|culmus}} - Nice collection of free Hebrew fonts<br />
<br />
====Indic====<br />
*{{Pkg|ttf-freebanglafont}} - Font for Bangla<br />
*{{Pkg|ttf-indic-otf}} - Indic OpenType Fonts collection (containing ttf-freebanglafont)<br />
:(This one contains a ಠ_ಠ "look of disapproval" that might be more to your liking than the {{Pkg|bdf-unifont}} one mentioned elsewhere in this document)<br />
<br />
====Khmer====<br />
*{{Pkg|ttf-khmer}} - Font covering glyphs for Khmer language<br />
*[http://code.google.com/webfonts/family?family=Hanuman&subset=khmer Hanuman] ({{AUR|ttf-google-webfonts}})<br />
<br />
====Sinhala====<br />
*{{AUR|ttf-lklug}} - Sinhala Unicode font (''AUR'')<br />
<br />
====Tamil====<br />
*{{AUR|ttf-tamil}} - Tamil Unicode fonts (''AUR'')<br />
<br />
====Thai====<br />
*{{Pkg|ttf-thai}} - Font covering glyphs for Thai<br />
<br />
===Math===<br />
*{{Pkg|font-mathematica}} - Mathematica fonts by Wolfram Research, Inc.<br />
*{{AUR|ttf-mathtype}} - MathType fonts ''(AUR)''<br />
*{{AUR|ttf-computer-modern-fonts}} - Flagged out of date as of 2009-11-14 ''(AUR)''<br />
<br />
===Microsoft fonts===<br />
See [[MS Fonts]].<br />
<br />
===Monospaced===<br />
Here are some suggestions. Every user has their own favorite, so experiment to find yours. <br />
If you're in a hurry, you read Dan Benjamin's blog post: [http://hivelogic.com/articles/top-10-programming-fonts ''Top 10 Programming Fonts''].<br />
<br />
Here's a long list of fonts by Trevor Lowing: http://www.lowing.org/fonts/<br />
<br />
====TrueType====<br />
*[[Wikipedia:Andalé Mono|Andalé Mono]] ({{AUR|ttf-ms-fonts}})<br />
*Anka/Coder ({{AUR|ttf-anka-coder}})<br />
*Anonymous Pro ({{AUR|ttf-anonymous-pro}}, included in {{AUR|ttf-google-webfonts}})<br />
*[[Wikipedia:Bitstream Vera|Bitstream Vera Mono]] ({{Pkg|ttf-bitstream-vera}})<br />
*[[Wikipedia:Consolas|Consolas]] ({{AUR|ttf-vista-fonts}})<br />
*[[Wikipedia:Courier New|Courier New]] ({{AUR|ttf-ms-fonts}})<br />
*Cousine ({{AUR|ttf-google-webfonts}}) - Chrome/Chromium OS replacement for Courier New (metric-compatible)<br />
*[[Wikipedia:DejaVu fonts|DejaVu Sans Mono]] ({{Pkg|ttf-dejavu}}) - Unicode<br />
*[[Wikipedia:Droid (font)|Droid Sans Mono]] ({{Pkg|ttf-droid}}, included in {{AUR|ttf-google-webfonts}})<br />
*Envy Code R ({{AUR|ttf-envy-code-r}})<br />
*[[Wikipedia:GNU FreeFont|FreeMono]] ({{Pkg|ttf-freefont}}) - Unicode<br />
*[[Wikipedia:Inconsolata|Inconsolata]] ({{Pkg|ttf-inconsolata}})<br />
*[[Wikipedia:Inconsolata|Inconsolata-g]] ({{AUR|ttf-inconsolata-g}}) - adds some programmer-friendly modifications<br />
*[[Wikipedia:Liberation fonts|Liberation Mono]] ({{Pkg|ttf-liberation}}) - Alternative to Courier New (metric-compatible)<br />
*[[Wikipedia:Lucida Console|Lucida Console]] ({{AUR|ttf-ms-fonts}})<br />
*[[Wikipedia:Lucida Typewriter|Lucida Typewriter]] (included in package {{Pkg|jre}})<br />
*[[Wikipedia:Monaco (typeface)|Monaco]] ({{Pkg|monaco-linux-font}})<br />
*Monofur ({{AUR|ttf-monofur}})<br />
<br />
====Bitmap====<br />
*Default 8x16<br />
*Dina ({{Pkg|dina-font}})<br />
*Lime ({{Pkg|artwiz-fonts}})<br />
*[[Wikipedia:ProFont|ProFont]] ({{Pkg|profont}})<br />
*[[Wikipedia:Proggy Programming Fonts|Proggy Programming Fonts]] ({{AUR|proggyfonts}})<br />
*Proggy opti cyrillic ({{AUR|proggyopticyr-font}})<br />
*Tamsyn ({{AUR|tamsyn-font}})<br />
*[[Wikipedia:Terminus (typeface)|Terminus]] ({{Pkg|terminus-font}})<br />
*Unifont (glyphs like ಠ_ಠ (look of disapproval)) ({{Pkg|bdf-unifont}})<br />
<br />
===Sans-serif===<br />
<br />
*[http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika Andika] ({{AUR|ttf-andika}}, included in {{AUR|ttf-sil-fonts}})<br />
*[[Wikipedia:Arial|Arial]] ({{AUR|ttf-ms-fonts}})<br />
*[[Wikipedia:Arial Black|Arial Black]] ({{AUR|ttf-ms-fonts}})<br />
*Arimo ({{AUR|ttf-google-webfonts}}) - Chrome/Chromium OS replacement for Arial (metric-compatible)<br />
*[[Wikipedia:Calibri|Calibri]] ({{AUR|ttf-vista-fonts}})<br />
*[[Wikipedia:Candara|Candara]] ({{AUR|ttf-vista-fonts}})<br />
*[[Wikipedia:Constantia (typeface)|Constantia]] ({{AUR|ttf-vista-fonts}})<br />
*[[Wikipedia:Corbel (typeface)|Corbel]] ({{AUR|ttf-vista-fonts}})<br />
*[[Wikipedia:DejaVu fonts|DejaVu Sans]] ({{Pkg|ttf-dejavu}}) - Unicode<br />
*[[Wikipedia:Droid (font)|Droid Sans]] ({{Pkg|ttf-droid}}, included in {{AUR|ttf-google-webfonts}})<br />
*[[Wikipedia:GNU FreeFont|FreeSans]] ({{Pkg|ttf-freefont}}) - Unicode<br />
*[[Wikipedia:Impact (typeface)|Impact]] ({{AUR|ttf-ms-fonts}})<br />
*[[Wikipedia:Liberation fonts|Liberation Sans]] ({{Pkg|ttf-liberation}}, improved/reworked Cyrillic: {{Pkg|ttf-liberastika}}) - Alternative to Arial (metric-compatible)<br />
*[[Wikipedia:Liberation fonts|Liberation Sans Narrow]] ({{Pkg|ttf-liberation}}) - Alternative to Arial Narrow (metric-compatible)<br />
*[[Wikipedia:Linux Libertine|Linux Biolinum]] ({{Pkg|ttf-linux-libertine}})<br />
*[[Wikipedia:Lucida Sans|Lucida Sans]] ({{AUR|ttf-ms-fonts}})<br />
*[[Wikipedia:Microsoft Sans Serif|Microsoft Sans Serif]] ({{AUR|ttf-ms-fonts}})<br />
*[[Wikipedia:PT Sans|PT Sans]] ({{AUR|ttf-google-webfonts}}) - 3 major variations: normal, narrow, and caption - Unicode: Latin, Cyrillic<br />
*[[Wikipedia:Tahoma (typeface)|Tahoma]] ({{AUR|ttf-tahoma}})<br />
*[[Wikipedia:Trebuchet MS|Trebuchet]] ({{AUR|ttf-ms-fonts}})<br />
*[[Wikipedia:Ubuntu-Title|Ubuntu-Title]] ({{AUR|ttf-ubuntu-title}})<br />
*[[Wikipedia:Ubuntu Font Family|Ubuntu Font Family]] ({{Pkg|ttf-ubuntu-font-family}})<br />
*[[Wikipedia:Verdana|Verdana]] ({{AUR|ttf-ms-fonts}})<br />
<br />
===Script===<br />
<br />
*[[Wikipedia:Comic Sans|Comic Sans]] ({{AUR|ttf-ms-fonts}})<br />
<br />
===Serif===<br />
*[[Wikipedia:Cambria (typeface)|Cambria]] ({{AUR|ttf-vista-fonts}})<br />
*[[Wikipedia:Charis SIL|Charis]] ({{AUR|ttf-charis}}, included in {{AUR|ttf-sil-fonts}}) - Unicode: Latin, Cyrillic<br />
*[[Wikipedia:DejaVu fonts|DejaVu Serif]] ({{Pkg|ttf-dejavu}}) - Unicode<br />
*[[Wikipedia:Doulos SIL|Doulos]] ({{AUR|doulos-sil}}, included in {{AUR|ttf-sil-fonts}}) - Unicode: Latin, Cyrillic<br />
*[[Wikipedia:Droid (font)|Droid Serif]] ({{Pkg|ttf-droid}}, included in {{AUR|ttf-google-webfonts}})<br />
*[[Wikipedia:GNU FreeFont|FreeSerif]] ({{Pkg|ttf-freefont}}) - Unicode<br />
*[[Wikipedia:Gentium|Gentium]] ({{Pkg|ttf-gentium}}, included in {{AUR|ttf-sil-fonts}}) - Unicode: Latin, Greek, Cyrillic, Phonetic Alphabet<br />
*[[Wikipedia:Georgia (typeface)|Georgia]] ({{AUR|ttf-ms-fonts}})<br />
*[[Wikipedia:Liberation fonts|Liberation Serif]] ({{Pkg|ttf-liberation}}) - Alternative to Times New Roman (metric-compatible)<br />
*[[Wikipedia:Linux Libertine|Linux Libertine]] ({{Pkg|ttf-linux-libertine}}) - Unicode: Latin, Greek, Cyrillic, Hebrew<br />
*[[Wikipedia:Times New Roman|Times New Roman]] ({{AUR|ttf-ms-fonts}})<br />
*Tinos ({{AUR|ttf-google-webfonts}}) - Chrome/Chromium OS replacement for Times New Roman (metric-compatible)<br />
<br />
===Unsorted===<br />
<!--This section should be absorbed into the Monospace/Serif/Sans-Serif structure--><br />
*{{AUR|ttf-google-webfonts}} - a huge collection of free fonts (including ubuntu, inconsolata, droid, etc.) - Note: Your font dialog might get very long as >100 fonts will be added<br />
*{{Pkg|ttf-mph-2b-damase}} - Covers full plane 1 and several scripts<br />
*{{AUR|ttf-sil-fonts}} - Gentium, Charis, Doulos, Andika and Abyssinica from SIL ''(AUR)''<br />
*{{Pkg|font-bh-ttf}} - Xorg Luxi fonts<br />
*{{Pkg|ttf-cheapskate}} - Font collection from ''dustismo.com''<br />
*{{Pkg|ttf-isabella}} - Calligraphic font based on the ''Isabella Breviary'' of 1497<br />
*{{Pkg|ttf-junicode}} - Junius font containing almost complete medieval latin script glyphs<br />
*arkpandorafonts {{AUR|ttf-arkpandora}} — Alternative to Arial and Times New Roman fonts<br />
*{{Pkg|xorg-fonts-type1}} — IBM Courier and Adobe Utopia sets of [[Wikipedia:PostScript fonts|PostScript fonts]]<br />
<br />
==Console fonts==<br />
<br />
The console, meaning a terminal running with no ''X'' Window System, uses the ASCII character set as the default. This font and the keymap used are easily changed.<br />
<br />
A console font is limited to either 256 or 512 characters. The fonts are found in {{ic|/usr/share/kbd/consolefonts/}}.<br />
<br />
''Keymaps, ''the connection between the key pressed and the character used by the computer, are found in the subdirectories of {{ic|/usr/share/kbd/keymaps/}}.<br />
<br />
=== Previewing and testing ===<br />
<br />
Unfortunately, no organized library of images is available to preview console fonts. The user can, however, use {{ic|setfont}} to temporarily change the font and be able to consider its use as the default. The available ''glyphs ''or letters in the font can also be viewed as a table with the command {{ic|showconsolefont}}.<br />
<br />
If the newly changed font is not suitable, a return to the default font is done by issuing the command {{ic|setfont}} without any arguments. If the console display is totally unreadable, this command will still work—the user just types in {{ic|setfont}} while "working blind."<br />
<br />
Note that {{ic|setfont}} only works on the console currently being used. Any other consoles, active or inactive, remain unaffected.<br />
<br />
==== Examples ====<br />
<br />
Change the font. This example is distinctive:<br />
$ setfont /usr/share/kbd/consolefonts/gr737b-9x16-medieval.psfu.gz<br />
<br />
Or change the font to one with 512 glyphs and set the keymap to ''ISO 8859-5'' using the {{ic|-m}} option:<br />
$ setfont /usr/share/kbd/consolefonts/LatArCyrHeb-16.psfu.gz -m 8859-5<br />
<br />
Then issue commands that send text to the display, perhaps view a ''manpage'' and try ''vi'' or ''nano'', and view the table of glyphs with the command, {{ic|showconsolefont}}.<br />
<br />
Return to the default font with:<br />
$ setfont<br />
<br />
=== Changing the default font ===<br />
<br />
To change the default font, the {{ic|CONSOLEFONT<nowiki>=</nowiki>}} and {{ic|CONSOLEMAP<nowiki>=</nowiki>}} settings in {{ic|/etc/rc.conf}} must be altered. Again, the fonts can be found in {{ic|/usr/share/kbd/consolefonts/}} directory and keymaps can be found in the subdirectories of {{ic|/usr/share/kbd/keymaps/}}.<br />
<br />
==== Examples ====<br />
For displaying characters such as ''Č, ž, đ, š'' or ''Ł, ę, ą, ś'' using the font {{ic|lat2-16.psfu.gz}}:<br />
CONSOLEFONT="lat2-16"<br />
It means that second part of ISO/IEC 8859 characters are used with size 16. You can change font size using other values like lat2-08...16. For the regions determined by 8859 specification, look at the [http://en.wikipedia.org/wiki/ISO/IEC_8859#The_Parts_of_ISO.2FIEC_8859 Wikipedia]. You can use a Terminus font which is recommended if you work a lot in console without X server. ter-216b for example is latin-2 part, size 16, bold. ter-216n is the same but normal weight. Terminus fonts have sizes up to 32.<br />
<br />
Now, set the proper keymap, for lat2-16 it will be:<br />
CONSOLEMAP="8859-2"<br />
<br />
To use the specified font in early userspace, that is, early in the bootup process, add the {{ic|consolefont}} hook to {{ic|/etc/mkinitcpio.conf}}:<br />
HOOKS="base udev autodetect pata scsi sata filesystems '''consolefont''' '''keymap'''"<br />
<br />
Then rebuild the image:<br />
# mkinitcpio -p linux<br />
<br />
{{Note|The above steps must be repeated for each kernel if more than one kernel package is installed.}}<br />
<br />
See [[Mkinitcpio#HOOKS]] for more information.<br />
<br />
==== Boot Error ====<br />
<br />
If "Loading Console Font" fails at boot time, this is probably because you didn't choose a valid font during your archlinux install.<br />
<br />
To get rid of this message, simply empty the CONSOLEFONT var in /etc/rc.conf (CONSOLEFONT=). It will fallback on default font at boot.</div>TrueBershttps://wiki.archlinux.org/index.php?title=Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=178829Pacman (Русский)2012-01-17T15:24:33Z<p>TrueBers: </p>
<hr />
<div>[[Category:Управление пакетами (Русский)]]<br />
[[Category:Русский]]<br />
{{i18n|pacman}} {{Lowercase title}}<br />
<br />
{{Article summary start|Описание}}<br />
{{Article summary text|pacman - [[Wikipedia:Package management system|пакетный менеджер]] Arch Linux. Менеджеры пакетов используются для установки, обновления и удаления программного обеспечения. В данной статье рассматриваются основные приемы и советы по устранению неполадок.}}<br />
{{Article summary heading|Обзор}}<br />
{{Article summary text|{{Package management overview}}}}<br />
{{Article summary heading|Дополнительно}}<br />
{{Article summary wiki|Downgrading Packages}}<br />
{{Article summary wiki|Improve Pacman Performance}}<br />
{{Article summary wiki|pacman GUI Frontends}}<br />
{{Article summary wiki|pacman Rosetta}}<br />
{{Article summary wiki|pacman Tips}}<br />
{{Article summary heading|Полезные ссылки}}<br />
{{Article summary link|libalpm(3) Manual Page|https://www.archlinux.org/pacman/libalpm.3.html}}<br />
{{Article summary link|pacman(8) Manual Page|https://www.archlinux.org/pacman/pacman.8.html}}<br />
{{Article summary link|pacman.conf(5) Manual Page|https://www.archlinux.org/pacman/pacman.conf.5.html}}<br />
{{Article summary link|repo-add(8) Manual Page|https://www.archlinux.org/pacman/repo-add.8.html}}<br />
{{Article summary end}}<br />
<br />
<br />
[[Wikipedia:Package management system|Менеджер пакетов]] '''[https://archlinux.org/pacman/ pacman]''' &mdash; является одной из основных особенностей Arch Linux. Он сочетает в себе простой формат бинарных пакетов и легкую в использовании систему сборки (смотрите [[Arch Build System]] и [[makepkg]]). '''Pacman''' позволяет пользователям с легкостью управлять и настраивать под себя пакеты, вне зависимости от того, из официального ли они репозитария Arch или собранные самостоятельно.<br />
<br />
'''Pacman''', синхронизируя пакеты с главным сервером, поддерживает систему в актуальном состоянии. Такая клиент-серверная модель, позволяет скачивать/устанавливать пакеты со всеми требуемыми зависимостями всего одной командой.<br />
<br />
'''Pacman''' написан на языке C и использует формат пакетов {{ic|.pkg.tar.xz}}.<br />
<br />
{{Tip|Официальный пакет {{Pkg|pacman}} включает в себя много дополнительных полезных инсрументов, таких как [[makepkg]], pactree, vercomp и другие. Весь перечень можно получить с помощью {{ic|pacman -Ql pacman <nowiki>|</nowiki> grep bin}} }}<br />
<br />
== Конфигурация ==<br />
<br />
Основные настройки pacman находятся в {{ic|/etc/pacman.conf}}. В этом файле, пользователь может указать все нужные ему настройки программы. Подробнее о конфигурировании можно прочесть в [https://www.archlinux.org/pacman/pacman.conf.5.html man pacman.conf].<br />
<br />
=== Основные Параметры ===<br />
<br />
Основные параметры находятся в секции {{ic|[options]}}. Для получения дополнительной информации о параметрах - прочтите страницу man или изучите установленный по умолчанию файл {{ic|pacman.conf}}.<br />
<br />
==== Пропуск обновления пакетов ====<br />
<br />
Для пропуска обновления какого-либо пакета, добавьте его название в строку:<br />
<br />
IgnorePkg=имя_пакета<br />
<br />
В случае, если необходимо в строке {{ic|IgnorePkg}} перечислить несколько пакетов - разделяйте имена пакетов пробелами:<br />
<br />
IgnorePkg=имя_пакета1 имя_пакета2 имя_пакета3<br />
<br />
==== Пропуск обновления группы пакетов ====<br />
<br />
Как и в случае с пакетом, вы также можете запретить обновления группы пакетов, например так:<br />
<br />
IgnoreGroup=имя_группы<br />
<br />
=== Репозитории ===<br />
<br />
В этом разделе файла {{ic|pacman.conf}} указываются репозитории, которые будут использоваться. Их можно указать прямо здесь или подключить из другого файла.<br />
<br />
Все официальные репозитории перечислены в одном файле - {{ic|/etc/pacman.d/mirrorlist}}, для доступа к ним используется переменная {{ic|$repo}}, таким образом достаточно поддерживать в актуальном состоянии только один список.<br />
<br />
Далее приведен пример использования [[mirrors|зеркал]] [[Official Repositories|официальных репозиториев]], которые перечислены в {{ic|/etc/pacman.d/mirrorlist}}.<br />
<br />
{{bc|<nowiki><br />
[core]<br />
# Добавьте свои предпочитаемые сервера сюда и они будут использоваться в первую очередь<br />
Include=/etc/pacman.d/mirrorlist<br />
<br />
[extra]<br />
# Добавьте свои предпочитаемые сервера сюда и они будут использоваться в первую очередь<br />
Include=/etc/pacman.d/mirrorlist<br />
<br />
[community]<br />
# Добавьте свои предпочитаемые сервера сюда и они будут использоваться в первую очередь<br />
Include=/etc/pacman.d/mirrorlist<br />
</nowiki>}}<br />
<br />
{{Note|Будьте осторожны при использовании репозитория [testing]. Пакеты в нём активно разрабатываются и обновляются, это может сказаться на стабильности и работоспособности других пакетов или системы в целом. Людям, использующим репозиторий [testing], для своевременного получения информации рекомендуется подписаться на [https://mailman.archlinux.org/mailman/listinfo/arch-dev-public список рассылки arch-dev-public].}}<br />
<br />
== Использование ==<br />
<br />
Чтобы узнать обо всех возможностях pacman - изучите [https://archlinux.org/pacman/pacman.8.html man pacman]. Примеры ниже - это только небольшая подборка доступных операций.<br />
<br />
===Установка Пакетов===<br />
<br />
====Установка определенных пакетов====<br />
Для установки одного пакета или группы пакетов (включая зависимости), используйте следующую команду:<br />
<br />
# pacman -S имя_пакета1 имя_пакета2 ...<br />
<br />
Если пакет имеет несколько версий в разных репозиториях (например в [extra] и [testing]). Можно указать, откуда именно следует установить пакет:<br />
<br />
# pacman -S extra/имя_пакета<br />
# pacman -S testing/имя_пакета<br />
<br />
====Установка группы пакетов====<br />
Некоторые пакеты принадлежат к группе пакетов, которые могут быть установлены одновременно. Например, при выполнении команды:<br />
<br />
# pacman -S gnome<br />
будут установлены все пакеты входящие в группу {{ic|gnome}}. Чтобы увидеть список пакетов принадлежащих к группе gnome, выполните:<br />
<br />
# pacman -Sg gnome<br />
<br />
Перечень доступных групп пакетов можно изучить посетив https://www.archlinux.org/groups/.<br />
<br />
{{Note|Если не будет использована опция {{ic|--needed}}, то при установке группы будут переустановлены все ранее установленные в систему и принадлежащие этой группе пакеты (даже если установленные в системе пакеты будут иметь последнюю доступную версию).}}<br />
<br />
{{Warning|1=При установке не достаточно одного обновления списка пакетов (например {{ic|pacman -Sy имя_пакета}}) - могут возникнуть проблемы с зависимостями [https://bbs.archlinux.org/viewtopic.php?id=89328]. В первую очередь, перед установкой новых пакетов, выполняйте полное [[#Upgrading packages|обновление]] системы.}}<br />
<br />
=== Удаление Пакетов ===<br />
<br />
Для удаления пакета, без удаления установленных зависимостей:<br />
<br />
# pacman -R имя_пакета<br />
<br />
Для удаления пакета со всеми зависимостями, не используемыми другими установленными пакетами:<br />
<br />
# pacman -Rs имя_пакета<br />
<br />
Для удаления пакета, его зависимостей, и всех пакетов зависящих от целевого пакета:<br />
<br />
{{Warning|Эта операция рекурсивна и должна использоваться с осторожностью, так как появляется риск удалить много потенциально необходимых пакетов.}}<br />
<br />
# pacman -Rsc имя_пакета<br />
<br />
По умолчанию pacman создает резервные копии конфигурационных файлов удаляемых приложений с помощью добавления к ним расширения: {{ic|.pacsave}}. Если вы хотите удалить и эти файлы - используйте ключ {{ic|-n}}:<br />
<br />
# pacman -Rn имя_пакета<br />
<br />
{{Note|pacman не удаляет конфигурационных файлов, созданных самими приложениями (например "dot-файлы" в вашей домашней папке).}}<br />
<br />
===Обновление Системы===<br />
<br />
pacman может обновить все пакеты системы одной командой. Количество пакетов зависит от того, насколько свежие пакеты стоят в вашей системе. Лучший вариант - синхронизация базы данных репозиториев '''И''' обновление вашей системы одной командой:<br />
<br />
# pacman -Syu<br />
<br />
{{Warning|В связи с тем, что Arch является постоянно-обновляемым дистрибутивом, пользователям следует помнить, что после или в процессе обновления могут возникнуть непредвиденные трудности. Поэтому обновляться следует с осторожностью. Это означает, что если, например, ожидаются большие изменения или нововведения в обновляемых пакетах, то обновлять систему лучше тогда, когда у пользователя будет достаточно свободного времени и он будет готов к решению возможных проблем.}}<br />
<br />
pacman является мощным инструментом по управлению пакетами, но он не сможет обработать все возможные ситуации. Если вас это смущает - прочтите [[The Arch Way|Путь Arch Linux]]. Пользователь должен быть внимателен и сам заниматься обеспечением работоспособности своей системы. '''При выполнении обновления системы, крайне важно, читать и осмысливать всю информацию которую выводит pacman.''' Если конфигурационный файл, измененный вами, для новой версии пакета нуждается в обновлении - pacman предложит вам объединить его с файлом [[Pacnew and Pacsave Files|pacnew]].<br />
<br />
{{Tip|Не забывайте, что вывод pacman заноситься в {{ic|/var/log/pacman.log}}.}}<br />
<br />
Перед обновлением желательно посетить [https://www.archlinux.org/ главную страницу Arch Linux], [https://www.archlinux.org.ru/ главную страницу русскоязычного сообщества Arch Linux] и проверить там последние новости (или подписаться на канал RSS): для обновлений требующих дополнительного вмешательства (если выполнения указанных pacman-ом действий не достаточно) будут добавлены соответствующие новости.<br />
<br />
Если решить проблемы согласно инструкциям не удаётся - поищите подобные сообщения на форуме. Вполне возможно, что другие пользователи столкнувшиеся с подобными проблемами уже предоставили варианты по её решению.<br />
<br />
=== Запросы к Базе Данных Пакетов ===<br />
<br />
pacman, с помощью флага {{ic|-Q}}, может искать пакеты в локальной базе данных; см.:<br />
<br />
$ pacman -Q --help<br />
<br />
и, с помощью флага {{ic|-S}}, в базе данных (репозитариях); см.:<br />
<br />
$ pacman -S --help<br />
<br />
pacman умеет искать пакеты в базе данных, как по названиям, так и по описаниям:<br />
<br />
$ pacman -Ss условие1 условие2 ...<br />
<br />
Поиск пакета по имени в базе данных (вывод без дополнительной информации):<br />
<br />
$ pacman -Sqs условие1 условие2 ...<br />
<br />
Для поиска среди установленных пакетов:<br />
<br />
$ pacman -Qs условие1 условие2 ...<br />
<br />
Для отображения обширной информации о данном пакете:<br />
<br />
$ pacman -Si имя_пакета<br />
<br />
для установленных пакетов:<br />
<br />
$ pacman -Qi имя_пакета<br />
<br />
Использование сдвоенного флага {{ic|-i}} позволит просмотреть список резервных копий файлов и список измененных файлов:<br />
<br />
$ pacman -Qii имя_пакета<br />
<br />
Для получения списка файлов установленного пакета:<br />
<br />
$ pacman -Ql имя_пакета<br />
<br />
Для получения списка файлов неустановленного пакета можно использовать утилиту {{ic|pkgfile}}, из состава пакета {{pkg|pkgtools}}, или {{ic|nosr}}, входящую в пакет {{aur|nosr-git}}, который расположен в [[AUR]].<br />
<br />
Чтобы узнать какому пакету принадлежит нужный файл:<br />
<br />
$ pacman -Qo /путь/к/файлу/имя_файла<br />
<br />
Для получения списка пакетов, которые больше не требуются как зависимости (пакеты, которые могут быть безопасно удалены или сироты):<br />
<br />
$ pacman -Qdt<br />
<br />
Для отображения зависимостей в виде дерева:<br />
<br />
$ pactree имя_пакета<br />
<br />
Для получения списка установленных пакетов, которые зависят от вашего пакета - можно воспользоваться утилитой {{ic|whoneeds}} из состава пакета {{pkg|pkgtools}}:<br />
<br />
$ whoneeds имя_пакета<br />
<br />
=== Получение Списка Установленных Пакетов для Быстрого Восстановления Системы ===<br />
<br />
Хорошей практикой явлется сохранение списка всех установленых пакетов. Если ваша система "упала" и её сложно восстановить, pacman может легко переустановить эти пакеты.<br />
<br />
Сначала, сохраните в список пакетов (доступных в репозитории):<br />
<br />
pacman -Qqe | grep -v "$(pacman -Qmq)" > pkglist<br />
<br />
# безопасная, но и более сложная альтернатива (во избежание удаления частичных совпадений)<br />
comm -13 <(pacman -Qmq | sort) <(pacman -Qqe | sort) > pkglist<br />
<br />
Сохраните этот файл на флешке или на другом носителе.<br />
<br />
Скопируйте файл pkglist в новую систему, перейдите в эту папку.<br />
<br />
Для восстановления используйте команду:<br />
pacman -S $(cat pkglist)<br />
<br />
=== Получение Списка Файлов не Принадлежащих Любому Пакету ===<br />
<br />
Если вы всегда хотите держать свою систему в чистоте и уважаете [[Путь Arch]], вы должны иногда проверять файлы отсутствующие в базе данных pacman. Эти файлы, зачастую установлены сторонними приложениями с использованием '''./configure; make; make install''' и т.п. Вы можете найти все эти установленные файлы (или симлинки) используя этот простой скрипт:<br />
<br />
#!/bin/bash<br />
time /usr/bin/pacman -Ql | cut -d ' ' -f 2- | sort -u > db.txt<br />
time find /arch /bin /boot /etc /lib /opt /sbin /usr 2>/dev/null | while read i; do<br />
if [ ! -d "$i" ]; then<br />
echo "$i"<br />
fi;<br />
done | sort -u > fs.txt<br />
time comm -23 fs.txt db.txt > non-db.txt<br />
<br />
#для проверки:<br />
#cat non-db.txt | while read i; do pacman -Qo "$i" 2>&1; done | tee test.txt<br />
<br />
заметьте - все файлы указанные в non-db.txt НЕ БУДУТ удалены без подтверждения. Здесь могут находиться конфигурационные файлы, журналы и др. Используйте этот список только если знаете, что вы делаете.<br />
<br />
=== Дополнительные команды ===<br />
<br />
Обновление системы и установка списка пакетов (за одну операцию):<br />
<br />
# pacman -Syu имя_пакета1 имя_пакета2 ...<br />
<br />
Скачать пакет, но не устанавливать его:<br />
<br />
# pacman -Sw имя_пакета<br />
<br />
Установить локальный пакет (не из репозитория):<br />
<br />
# pacman -U /путь/к/пакету/имя_пакета-version.pkg.tar.xz<br />
<br />
Установить 'не локальный' пакет (не из репозитория):<br />
<br />
# pacman -U <nowiki>http://www.example.com/repo/example.pkg.tar.xz</nowiki><br />
<br />
Удалить из кэша ({{ic|/var/cache/pacman/pkg}}) неустановленные пакеты:<br />
<br />
{{Warning|Будут удалены все пакеты из кэша. Поэтому, в случае возникновения проблем после обновлениий - появятся дополнительные трудности, связанные с откатом версий пакетов.}}<br />
<br />
# pacman -Sc<br />
<br />
Полная очистка кэша пакетов:<br />
<br />
{{Warning|Будут удалены все пакеты из кэша. Выполняйте это только в том случае, если у вас всё нормально работает и вам не придётся [[Downgrade_packages| откатывать]] любой пакет.}}<br />
<br />
# pacman -Scc<br />
<br />
В качестве альтернативы ключам ''-Sc'' и ''-Scc'' - можно использовать пакет {{AUR|Cacheclean}}, доступный в [[AUR]]. Это скрипт на python, который позволяет выборочно очищать кэш pacman'а от старых версий пакетов.<br />
<br />
===Частичные обновления официально не поддерживаются===<br />
Arch Linux постоянно обновляемый дистрибутив и это значит, что в репозиториях всегда находятся новые версии [[Wikipedia:Library (computing)|библиотек]]. Разработчики и доверенные пользователи собирают пакеты для репозиториев с использованием этих библиотек. Для пакетов установленных локально (например пакеты из [[Arch User Repository|AUR]]), нужно самостоятельно решать вопрос с зависимостями согласно данным [[Wikipedia:soname|soname]].<br />
<br />
Именно поэтому частичное обновление '''не поддерживается'''. Не используйте {{ic|pacman -Sy package}} или другие эквиваленты {{ic|pacman -Sy}} и {{ic|pacman -S package}}. Всегда перед установкой пакетов синхронизируйте репозитории и обновляйте систему полностью. По той же самой причине нужно быть осторожными при использовании {{ic|IgnorePkg}} и {{ic|IgnoreGroup}}.<br />
<br />
Если после частичного обновления оказалось, что бинарные файлы не могут найти нужных версий библиотек и проблему '''не возможно "решить" созданием символической ссылки''' (библиотеки не имеют '''обратной совместимости''') - выполните {{ic|pacman -Syu}}, как правило этого будет достаточно для устранения проблемы.<br />
<br />
== Устранение проблем ==<br />
<br />
{{FAQ<br />
|question=Мне нужно запустить pacman-key --init через ssh. Как мне получить энтропию?<br />
|answer=1) Соберите и установите пакет {{AUR|rng-tools}} из [[AUR]] на целевой машине. Подключитесь через ssh и выполните следующие команды:<br />
# sed -i 's/0/10/' /etc/conf.d/rngd<br />
# rngd -f -r /dev/urandom &<br />
# pacman-key --init<br />
<br />
После успешного выполнения pacman-key просто остановите rngd и удалите пакет.<br />
<br />
# killall rngd<br />
# pacman -Rns rng-tools<br />
<br />
Pacman4 теперь готов к использованию.}}<br />
<br />
{{FAQ<br />
|question=Обновление пакета XYZ сломало мою систему!<br />
|answer=Arch Linux - передовой, постоянно обновляемый дистрибутив. Обновления для пакетов становятся доступными тогда, когда их посчитают достаточно стабильными для повседневного использования. Тем не менее, обновления иногда требуют вмешательства пользователя: может потребоваться обновление конфигурационных файлов, могут измениться дополнительные зависимости, и т.д.<br />
<br />
Запомните основное правило - не обновляйте систему "вслепую". Всегда внимательно изучайте список обновляемых пакетов. Обращайте внимание на обновление "критически важных" компонентов ({{ic|linux}}, {{ic|xorg-server}}, и т.д.). Если такие пакеты есть - проверьте наличие новостей на https://www.archlinux.org/ и просмотрите последние сообщения на форуме, возможно кто-то уже столкнулся с проблемами при обновлении.<br />
<br />
Если известно/ожидается, что после обновления могут возникнуть проблемы - pacman выведет соответствующее сообщение. Если вы упустили какую-то информацию, которую вывел pacman, то её можно еще раз просмотреть в ({{ic|/var/log/pacman.log}}). <br />
<br />
Теперь, '''если не было никаких предупреждений от pacman, отсутствуют соответствующие новости на https://www.archlinux.org/ и нет сообщений относительно обновлений на форуме''', имеет смысл обратиться за помощью на форум, [[IRC Channel|IRC-канал]], или [[Downgrading Packages|откатить пакет к работающей версии]].<br />
<br />
Перечитайте последний абзац.}}<br />
<br />
{{FAQ<br />
|question=Я знаю что для пакета ABC доступны обновления, но pacman сообщает мне, что система в актуальном состоянии!<br />
|answer=Зеркала pacman синхронизируются не мгновенно. Иногда может пройти более 24 часов, прежде чем обновления станут доступны вам. <br />
<br />
В качестве решения можно посоветовать сменить зеркало. На [https://www.archlinux.de/?page=MirrorStatus MirrorStatus] можно посмотреть состояние зеркал.}}<br />
<br />
{{FAQ<br />
|question=При обновлении появляется сообщение об ошибке: "file exists in filesystem" ("файл существует в файловой системе")!<br />
|answer=Дополнительно: ''Взято из https://bbs.archlinux.org/viewtopic.php?id=56373 у Misfit138.''<br />
<br />
error: could not prepare transaction<br />
error: failed to commit transaction (conflicting files)<br />
package: /path/to/file exists in filesystem<br />
Errors occurred, no packages were upgraded.<br />
<br />
Почему это происходит: pacman при обнаружении конфликтующих файлов, по умолчанию, не будет их перезаписывать автоматически. Это не ошибка, так сделано специально. (узнать какому пакету принадлежит файл, если таковой имеется, можно с помощью {{ic|pacman -Qo}}.)<br />
<br />
Вопрос решается тривиально. Сначала проверьте не принадлежит ли файл другому пакету: ({{ic|pacman -Qo /path/to/file}}). Если принадлежит - создайте [[Reporting Bug Guidelines|отчет об ошибке]]. Если проблемный файл не нужен другим пакетам - переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, то старый файл можно удалить.}}<br />
<br />
{{FAQ<br />
|question=При установке пакета я получаю сообщение об ошибке: "not found in sync db"<br />
|answer=Для начала убедитесь, что пакет вообще существует (и вы нигде не опечатались!). Если пакет не существует, то проблема может быть в том, что ваша база пакетов не синхронизирована с репозиториями или репозитории неправильно настроены. Для принудительного обновления списка пакетов попробуйте выполнить {{ic|pacman -Syy}}.}}<br />
<br />
{{FAQ<br />
|question=pacman несколько раз обновляет один и тот же пакет!<br />
|answer=Это может быть связано с дублированием записей в {{ic|/var/lib/pacman/local/}}, к примеру имеется два экземпляра {{ic|linux}}. {{ic|pacman -Qi}} выведет правильную версию, а {{ic|pacman -Qu}} покажет её как устаревшую и, следовательно, требующую обновления.<br />
<br />
Решение: удалить лишнюю запись из {{ic|/var/lib/pacman/local/}}.<br />
<br />
{{Note|pacman версии 3.4, в случае обнаружения повторяющихся записей, должен вывести сообщение об ошибке.}}}}<br />
<br />
{{FAQ<br />
|question=pacman сбоит при обновлении!<br />
|answer=Если при попытке удаления, переустановки или обновления пакетов pacman падает с ошибкой "database write" ("записи в базу данных"):<br />
#Загрузитесь используя Arch live CD<br />
#Смонтируйте корневую файловую систему<br />
#Обновите базу данных pacman с помощью {{ic|pacman -Syy}}<br />
#Переустановите сломанный пакет через {{ic|pacman -r /путь/к/корневому_разделу -S package}}}}<br />
<br />
{{FAQ<br />
|question=Я установил программу используя {{ic|make install}}; теперь эти файлы не принадлежат ни одному из пакетов!<br />
|answer=При обнаружении "конфликтующих файлов", чтобы их не перезаписывать вручную, можно использовать pacman с ключом {{ic|-f}} ({{ic|pacman -Sf}}).<br />
<br />
Почитайте [[pacman Tips#Getting a list of files not owned by any package]], о скрипте, проверяющем файловую систему на наличие ''брошенных'' файлов.}}<br />
<br />
{{FAQ<br />
|question=Мне нужен пакет с определенным файлом. Как узнать какому пакету это файл принадлежит?<br />
|answer=Установите [[pkgtools]], в его состав входит {{ic|pkgfile}}, использующий отдельную базу данных со всеми файлами и связанными с ними пакетами.}}<br />
<br />
{{FAQ<br />
|question=pacman полностью не работоспособен! Как мне его переустановить?<br />
|answer=Если pacman не работает и не получается его восстановить - скачайте вручную пакеты ({{Pkg|openssl}}, {{Pkg|libarchive}}, {{Pkg|libfetch}} и {{Pkg|pacman}}) и распакуйте их в корневой раздел. Бинарный pacman будет восстановлен вместе с конфигурационным файлом по умолчанию. Затем, для поддержания целостности базы данных пакетов, переустановите скачанные пакеты стандартными средствами pacman. Дополнительную информацию и пример (устарел) скрипта, автоматизирующего этот процесс, можно найти в [https://bbs.archlinux.org/viewtopic.php?id=95007 этом] сообщении форума.}}<br />
<br />
==См. также==<br />
*[[Pacman package signing]]<br />
*[[FAQ#Package_Management]]</div>TrueBershttps://wiki.archlinux.org/index.php?title=Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)/Package_signing_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)&diff=178826Pacman (Русский)/Package signing (Русский)2012-01-17T15:16:30Z<p>TrueBers: Created page with "Category:Управление пакетами (Русский) {{i18n|Pacman-key}}{{lowercase title}} fr:pacman-key pacman-key — это новая утилита, ..."</p>
<hr />
<div>[[Category:Управление пакетами (Русский)]]<br />
{{i18n|Pacman-key}}{{lowercase title}}<br />
[[fr:pacman-key]]<br />
<br />
pacman-key — это новая утилита, входящая в pacman 4. Она позволяет пользователю управлять списком доверенных ключей для менеджера пакетов pacman, используя новую реализацию подписи пакетов. Для дополнительных сведений смотрите блогозаписи [http://allanmcrae.com/2011/08/pacman-package-signing-1-makepkg-and-repo-add/][http://allanmcrae.com/2011/08/pacman-package-signing-2-pacman-key/][http://allanmcrae.com/2011/08/pacman-package-signing-3-pacman/][http://allanmcrae.com/2011/12/pacman-package-signing-4-arch-linux/] и вики-страницу [https://wiki.archlinux.org/index.php/Package_Signing_Proposal_for_Pacman package signing proposal].<br />
<br />
==Общий обзор ключей и отпечатков==<br />
PGP-ключ позволяет разработчику однозначно подписать свой пакет, гарантируя, что пакет сделал именно он, а не кто-то, кто выдает себя за разработчика.<br />
<br />
===Отпечаток или идентификатор ключа===<br />
* Отпечаток — это короткое представление ключа, которое может использоваться для его идентификации, не показывая при этом весь ключ (иногда очень длинный). Это что-то вроде "имени" ключа. В документации pacman его называют идентификатором ключа (keyid).<br />
* Форматы отпечатков<br />
** Отпечатки формата "6645 B0A8 C700 5E78 DB1D 7864 F99F FE0F EAE9 99BD" требуют сжатия путем удаления пробелов: "6645B0A8C7005E78DB1D7864F99FFE0FEAE999BD"<br />
** Приставка "0x" необязательна. Её присутствие не влияет на корректную работу.<br />
<br />
===Серверы ключей===<br />
* Серверы PGP-ключей хранят файлы ключей и позволяют искать ключи по их отпечаткам. Указать сервер ключей можно опцией {{ic|--keyserver}}.<br />
* hkp://pgp.mit.edu является одним из серверов PGP-ключей, который используют разработчики Archlinux.<br />
* Стандартный сервер ключей может быть изменен в файле {{ic|/etc/pacman.d/gnupg/gpg.conf}}.<br />
<br />
==Настройка==<br />
Чтобы полностью отключить проверку PGP-ключей, добавьте следующую строку в раздел [Options] файла {{ic|/etc/pacman.conf}}:<br />
SigLevel = Never<br />
<br />
Для начальной настройки хранилища ключей выполните:<br />
# pacman-key --init<br />
<br />
Директива SigLevel принимает 3 основных значения:<br />
* '''Required''', обязательно выполнять проверку сигнатур;<br />
* '''Optional''' (по умолчанию), проверять сигнатуры, если они имеются, но также допускать пакеты без подписей;<br />
* '''Never''', никогда не выполнять проверку сигнатур.<br />
<br />
==Добавление ключей==<br />
Когда pacman встречает незнакомые ключи на пакетах, он предлагает пользователю добавить этот ключ. Ключи можно также скачать вручную и выполнить '{{ic|pacman-key -a файл-ключа}}' или получить файл ключа с сервера с помощью отпечатка. Второй способ легче и объяснен ниже.<br />
* Найдите отпечаток ключа разработчика на [https://www.archlinux.org/developers/ странице разработчиков] в строке PGP Key. Текст ссылки является отпечатком.<br />
* Выполните команду {{ic|pacman-key -r <отпечаток> --keyserver <сервер ключей>}}. Вместо <сервер ключей> укажите "hkp://pgp.mit.edu".<br />
* {{ic|pacman-key -l}} выведет список добавленных ключей.<br />
* Таким образом добавятся ключи в брелок, но останется "неизвестный" уровень доверия.<br />
<br />
==Подписывание ключей==<br />
Чтобы ключи работали, их уровень доверия нужно изменить.<br />
<br />
Чтобы подписать ключ локально, выполните:<br />
<br />
# pacman-key --lsign-key <идентификатор ключа><br />
<br />
Так же это можно сделать gpg командой tsign или {{ic|pacman-key --edit-key "<отпечаток>"}} и далее {{ic|tsign}} <br />
<br />
Pacman'у можно сказать, чтобы он доверял всем ключам брелока. Для этого добавьте ОДНУ из следующих строк в раздел [Options] файла {{ic|/etc/pacman.conf}}<br />
SigLevel = Required TrustAll<br />
SigLevel = Optional TrustAll<br />
<br />
==Скрипты для добавления требуемых PGP-ключей==<br />
<br />
Когда мастер-ключи добавлены, вам не нужно проверять PGP-ключи каждого разработчика Arch Linux или Доверенного Пользователя, как и тех, которые подписаны, как минимум, тремя мастер-ключами.<br />
<br />
===Скрипт для добавления всех PGP мастер-ключей===<br />
Этот скрипт добавляет мастер-ключи в хранилище pacman и устанавливает уровень доверия в "marginal" (3).<br />
<br />
{{warning|Используйте с осторожностью. Пожалуйста убедитесь, что ключи, указанные ниже, совпадают с [https://www.archlinux.org/master-keys/ мастер-ключами]. Также возможно, что кто-то взломает страницу мастер-ключей и заменит на свои поддельные, таким образом сделав весь процесс подписания бессмысленным.}}<br />
<br />
Выполняйте от root'а или добавьте sudo перед командой pacman-key.<br />
<br />
for key in FFF979E7 CDFD6BB0 4C7EA887 6AC6A4C2 824B18E8; do<br />
pacman-key --recv-keys $key<br />
pacman-key --lsign-key $key<br />
printf 'trust\n3\nquit\n' | gpg --homedir /etc/pacman.d/gnupg/ \<br />
--no-permission-warning --command-fd 0 --edit-key $key<br />
done<br />
<br />
===Скрипт для добавления всех PGP-ключей со [https://www.archlinux.org/developers/ Страницы разработчиков]===<br />
<br />
Данный скрипт использует curl чтобы скачать страницу Разработчиков и извлечь отпечатки PGP-ключей, выполняет команду {{ic|pacman --recv-keys}}, используя {{ic|pgp.mit.edu}} в качестве сервера ключей, чтобы добавить ключи в хранилище pacman'а.<br />
<br />
{{warning|Используйте с осторожностью. Также возможно, что кто-то взломает страницу Разработчиков и заменит ключи на свои поддельные, таким образом сделав весь процесс подписания бессмысленным.}}<br />
<br />
Выполняйте от root'а или добавьте sudo перед командой pacman-key.<br />
<br />
curl <nowiki>https://www.archlinux.org/developers/</nowiki> |<br />
awk -F\" '(/pgp.mit.edu/) {sub(/.*search=0x/,"");print $1}' |<br />
xargs pacman-key --recv-keys<br />
<br />
===Скрипт для добавления всех PGP-ключей со [https://www.archlinux.org/trustedusers/ страницы Доверенных Пользователей]===<br />
<br />
Данный скрипт использует curl чтобы скачать страницу Доверенных Пользователей и извлечь отпечатки PGP-ключей, выполняет команду {{ic|pacman --recv-keys}}, используя {{ic|pgp.mit.edu}} в качестве сервера ключей, чтобы добавить ключи в хранилище pacman'а.<br />
<br />
{{warning|Используйте с осторожностью. Также возможно, что кто-то взломает страницу Доверенных Пользователей и заменит ключи на свои поддельные, таким образом сделав весь процесс подписания бессмысленным.}}<br />
<br />
Выполняйте от root'а или добавьте sudo перед командой pacman-key.<br />
<br />
curl <nowiki>https://www.archlinux.org/trustedusers/</nowiki> |<br />
awk -F\" '(/pgp.mit.edu/) {sub(/.*search=0x/,"");print $1}' |<br />
xargs pacman-key --recv-keys<br />
<br />
===Скрипт для добавления всех PGP-ключей (и Разработчиков, и Доверенных Пользователей)===<br />
<br />
{{warning|Используйте с осторожностью. Также возможно, что кто-то взломает страницу Разработчиков и/или страницу Доверенных Пользователей и заменит ключи на свои поддельные, таким образом сделав весь процесс подписания бессмысленным.}}<br />
<br />
curl <nowiki>https://www.archlinux.org/{developers,trustedusers}/</nowiki> |<br />
awk -F\" '(/pgp.mit.edu/) {sub(/.*search=0x/,"");print $1}' |<br />
xargs pacman-key --recv-keys<br />
<br />
==Потенциальное решение, если не удается импортировать ключи==<br />
<br />
Проблема может возникнуть, если некоторые Интернет-провайдеры блокируют порт, используемый для импорта PGP-ключей.<br />
<br />
Отредактируйте {{ic|/etc/pacman.d/gnupg/gpg.conf}}, заменив {{ic|keyserver hkp://keys.gnupg.net}} на {{ic|keyserver hkp://pgp.mit.edu:11371}}. Всё должно заработать.</div>TrueBers