Несколько дней назад мы тут обсуждали пару сумасшедших идей.
По результатам этого обсуждения я набросал следующий драфт:
Монтирование разделов, выполняемое из initrd.
Если переменная fslayout не установлена, выполняется традиционный алгоритм монтирования:
1. В / монтируется устройство из переменной rootdev.
2. Анализируется файл /etc/fstab. Если в нём присутствует запись для /usr, /usr также монтируется.
Если переменная fslayout установлена, выполняется новый алгоритм:
Переменная fslayout содержит 1 или более описаний точек монтирования, разделенных запятой.
path:dev — монтировать dev в path
path1>path2 — вместо монтирования, создать симлинк path1 -> path2
path@dev — шорткат для /mountpoints/devbasename:dev,path>/mountpoints/devbasename/pathbasename (пример /boot@/dev/sda1,/etc@/dev/sda2,/usr@/dev/sda2). Если при выполнении этой команды каталог /mountpoints отсутствует, он будет создан.
Данные команды выполняются в том же порядке, в каком они следуют в fslayout. Повторные вхождения одной и той же команды игнорируются.
Если первой командой не является команда монтирования для пути /, / монтируется как tmpfs.
После выполнения этих команд выполняются следующие действия:
1. Если для пути /usr не была указана никакая команда, анализируется файл /etc/fstab. Если в нём присутствует запись для /usr, она выполняется.
2. Если для пути /boot не была указана никакая команда, анализируется файл /etc/fstab. Если в нём присутствует запись для /boot, она выполняется.
3. Если имя /bin отсутствует в файловой системе, выполняется создание симлинка /bin>/usr/bin
4. Если имя /sbin отсутствует в файловой системе, выполняется создание симлинка /sbin>/usr/sbin
5. Если имя /lib отсутствует в файловой системе, выполняется создание симлинка /lib>/usr/lib
Ожидаемый фидбек от треда:
1. Конструктивная критика.
2. Баттхерт любителей пофапать на FHS.