UPDATE: systemd норм, я лох; btrfs диски долго монтируются, но про это отдельно. Тема закрыта.
systemd-хейтеров прошу пройти мимо, не засирать тему.
Решил я ускорить загрузку системы. Для начала посмотрел что её тормозит:
# systemd-analyze critical-chain
graphical.target @18.585s <<<=== LOOK AT THIS <<<===
└─multi-user.target @18.585s
  └─apcupsd.service @18.576s +7ms
    └─network-online.target @18.575s
      └─NetworkManager-wait-online.service @11.740s +6.833s
        └─NetworkManager.service @11.694s +44ms
          └─network-pre.target @11.693s
            └─firewalld.service @10.930s +762ms
              └─polkit.service @11.225s +152ms
                └─basic.target @10.926s
                  └─dbus-broker.service @10.991s +139ms
                    └─dbus.socket @10.922s
                      └─sysinit.target @10.916s
                        └─systemd-update-utmp.service @10.906s +9ms
                          └─auditd.service @10.861s +41ms
                            └─systemd-tmpfiles-setup.service @10.786s +72ms
                              └─local-fs.target @10.782s
                                └─mnt-.transmission.mount @2.362s +8.418s <<<=== LOOK AT THIS <<<===
                                  └─local-fs-pre.target @2.360s
                                    └─systemd-tmpfiles-setup-dev.service @874ms +32ms
                                      └─kmod-static-nodes.service @829ms +11ms
                                        └─systemd-journald.socket
                                          └─system.slice
                                            └─-.slice
Менюшка логина появляется на 19-той секунде, не слишком быстро. Почти 7 секунд NetworkManager
ждал когда интернет появится, но сейчас не об этом. В данный момент меня интересует
mnt-.transmission.mount, который съел 8 секунд. Вот этот юнит:
# systemctl cat mnt-.transmission.mount
[Unit]
Description = Transmission storage disk
Before      = transmission-daemon.service
[Mount]
Type  = btrfs
What  = /dev/disk/by-uuid/84ebf9fc-dbd0-4a29-a38f-109e71957dee
Where = /mnt/.transmission
[Install]
RequiredBy = transmission-daemon.service
Монтирование двухтерабайтного диска и вправду занимает 8 секунд:
# time systemctl start mnt-.transmission.mount
real    0m8.389s
user    0m0.008s
sys     0m0.005s
Ладно, пробую сделать ленивое монтирование, авось поможет. Добавляю .automount:
# systemctl cat mnt-.transmission.automount
[Unit]
Description = Transmission storage disk
Before      = transmission-daemon.service
[Automount]
Where = /mnt/.transmission
[Install]
RequiredBy = transmission-daemon.service
Далее:
# systemctl disable mnt-.transmission.mount
# systemctl enable mnt-.transmission.automount
# reboot
Результат:
# systemd-analyze critical-chain
graphical.target @14.081s
└─multi-user.target @14.081s
  └─transmission-daemon.service @3.493s +10.586s <<<=== LOOK AT THIS <<<===
    └─mnt-.transmission.mount @3.681s +8.283s
      └─mnt-.transmission.automount @2.300s
        └─local-fs-pre.target @2.299s
          └─systemd-tmpfiles-setup-dev.service @879ms +34ms
            └─kmod-static-nodes.service @833ms +13ms
              └─systemd-journald.socket
                └─system.slice
                  └─-.slice
На 4 секуднды быстрее, но всё равно как-то не быстро. Пробую убрать из mnt-.transmission.mount
строчку
Before      = transmission-daemon.service
Не помогает, всё те же 14 секунд, 10 из которых сожрал transmission-daemon.service. Не он
сам, конечно, это всё то же монтирование /mnt/.transmission, только теперь неявное.
Но вот вопрос: почему multi-user.target ждёт готовности transmission-daemon.service?
multi-user.target про transmission ничего не знает, но transmission-daemon.service в
курсе про multi-user.target:
# systemctl cat transmission-daemon.service
[Unit]
Description=Transmission BitTorrent Daemon
After=network.target
[Service]
User=transmission
Type=notify
ExecStart=/usr/bin/transmission-daemon -f --log-error
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target <<<=== LOOK AT THIS <<<===
WantedBy указывает что при старте multi-user надо запустить transmission-daemon, но,
вроде бы, не говорит что надо ждать его готовности… Однако:
# man systemd.target
...
Target units will automatically complement all configured dependencies of 
type Wants= or Requires= with dependencies of type After=...
Вот в чём засада: multi-user.target ждёт готовности всех сервисов, которые к нему навязавлись
через WantedBy=multi-user.target.
Однако:
...unless DefaultDependencies=no is set in the specified units.
Ok, пробую добавить DefaultDependencies=no в transmission-daemon.service:
# systemctl cat transmission-daemon.service 
[Unit]
Description=Transmission BitTorrent Daemon
DefaultDependencies=no <<<=== LOOK AT THIS <<<===
After=network.target
[Service]
User=transmission
Type=notify
ExecStart=/usr/bin/transmission-daemon -f --log-error
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target
Результат:
# systemd-analyze critical-chain
graphical.target @10.684s <<<=== LOOK AT THIS <<<===
└─multi-user.target @10.684s
  └─apcupsd.service @10.676s +6ms
    └─network-online.target @10.674s
      └─NetworkManager-wait-online.service @3.681s +6.992s
        └─NetworkManager.service @3.635s +43ms
          └─network-pre.target @3.633s
            └─firewalld.service @2.834s +798ms
              └─polkit.service @3.177s +144ms
                └─basic.target @2.823s
                  └─dbus-broker.service @2.921s +158ms
                    └─dbus.socket @2.806s
                      └─sysinit.target @2.785s
                        └─systemd-update-utmp.service @2.776s +8ms
                          └─auditd.service @2.728s +41ms
                            └─systemd-tmpfiles-setup.service @2.655s +67ms
                              └─local-fs.target @2.645s
                                └─run-user-1001.mount @13.492s
                                  └─local-fs-pre.target @2.445s
                                    └─systemd-tmpfiles-setup-dev.service @910ms +44ms
                                      └─kmod-static-nodes.service @858ms +20ms
                                        └─systemd-journald.socket
                                          └─-.mount
                                            └─systemd-journald.socket
                                              └─...
Опять вылез NetworkManager-wait-online.service, но transmission-daemon.service пропал!
Бинго!?
Вопросы:
- 
8 секунд на монтирование двухтерабайтного диска — это нормально? Это btrfs такой быстрый или диск медленный?
 - 
Чисто теоретически: Зачем
.targetждёт готовности всех сервисов, которые к нему навязались черезWantedBy? - 
Есть ли способы запустить сервис, но не дожидаться его готовности без использования
DefaultDependencies=no? Хз что там ещё было в этих зависимостях по умолчанию, мне кажется, чтоDefaultDependencies=no— слишком грубо. 



