The Filesystem Hierarchy Standard (FHS) [1] 定義了 Linux 發行版中的主要目錄及目錄結構, 此標準由 Linux 基金會所制定並維護. 目前最新版本為 3.0, 為 2015年所發行的
下圖為目錄以及相關描述
src: https://commons.wikimedia.org/wiki/File:Standard-unix-filesystem-hierarchy.svg
早期之所以將 /{/bin, /sbin, /lib} 和 /usr{/bin, /sbin, /lib} 切分的原因要回到設計 Unix 的1970年代. 1971 年的 disk size 一塊只有 1.5 MB 左右, 而 Operating system 太大, 導致放不進一個 disk 中. 所以Ken Thompson and Dennis Ritchie 將其他程式放進第二個 disk, 並命名為 /usr{/bin, /sbin, /lib} [2].
瞭解之前時空背景以及設計初衷後, 可知以目前的硬體設備規格來說, 當初想要解決的問題已不復存在. /{/bin, /sbin, /lib} 和 /usr{/bin, /sbin, /lib} 切分設計已不符現今需求. 但如果直接移除這些目錄會造成非常多相容性議題. 所以絕大部份的 Linux 主流發行版 Fedora, RHEL [3], Arch [4], openSUSE [5]. 都使用所謂的 usr merge 的折衷動作. 以 symbolic link 來進行合併的動作.
身為少數還沒進行 usr merge 的Debian . 如今已在 Debian policy [6] 寫入相關規則 – 即套件不可同時安裝檔於 /path and /usr/path, 此外也提供套件 usrmerge [7] 供安裝.
usr merge 的作法:
透過 symbolic link 指向 /usr 底下的目錄
- /bin -> /usr/bin
- /sbin -> /usr/sbin
- /lib -> /usr/lib
- /lib64 -> /usr/lib64
usr merge 的好處:
- 讓整體系統更乾淨, 簡潔
- 增加與其他 Unix-like 作業系統的兼容性
- Solaris
- Redhat
- openSUSE
- Arch
- …
- 拆分 /{/bin, /sbin, /lib} 和 /usr{/bin, /sbin, /lib} 已無太大實質意義
> 透過 symbolic link 來兼容之前的程式
usr merge 的注意事項:
- 若 /{/bin, /sbin, /lib} 和 /usr{/bin, /sbin, /lib} 分屬為不同儲存設備, 在開機時有機會因執行順序而遇到問題
- 需要 initramfs 等等的方法來處理
- 舊有的套件相容性議題
- 不可分別在 /{/bin, /sbin, /lib} 和 /usr{/bin, /sbin, /lib} 放置同名但不同內容的程式
心得:
usrmerge 帶來好處, 但也帶來一些副作用. Debian 10 目前已有 usrmerge 套件可供安裝, 至於是否會在 Debian 10 上預設安裝, 就讓我們繼續看下去.
References:
[1]: https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
[2]: http://lists.busybox.net/pipermail/busybox/2010-December/074114.html
[3]: https://fedoraproject.org/wiki/Features/UsrMove
[4]: https://www.archlinux.org/news/binaries-move-to-usrbin-requiring-update-intervention/
[5]: https://en.opensuse.org/openSUSE:Usr_merge
[6]: https://www.debian.org/doc/debian-policy/#binaries
[7]: https://packages.debian.org/buster/usrmerge
[8]: https://lwn.net/Articles/670071/
[9]:http://people.redhat.com/mseida/presos/RHEL6-7-Houston.pdf
[10]: https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/
[11]: https://wiki.debian.org/UsrMerge
usrmerge in Debian 有 “ 1 則迴響 ”