Debian · Linux

usrmerge in Debian

The Filesystem Hierarchy Standard (FHS)  [1] 定義了 Linux 發行版中的主要目錄及目錄結構, 此標準由 Linux 基金會所制定並維護. 目前最新版本為 3.0, 為 2015年所發行的

下圖為目錄以及相關描述

2017-12-18_134632.png

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 作業系統的兼容性
    1. Solaris
    2. Redhat
    3. openSUSE
    4. 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

發表迴響