Gentoo 的 udev 升到 150 以上要小心

因為有公告今天停電的關係,
昨天特別把其中一台更新比較頻繁的 Gentoo 試重開,
結果開不起來,
今天跑去看了一下發現 /dev/sd* 全部消失了,
開機開到 fsck 的時候出現 cannot open device xxx 這樣,
因為以前也被 udev 炸過所以大概猜得出是 udev 更新的問題。

解決方法大致上是:

  1. 先用 udevadm test /sys/block/xxx 把 /dev/xxx 重新生出來,大致上的下法就是:

    udevadm test /sys/block/sda
    udevadm test /sys/block/sda/sda1
    udevadm test /sys/block/sda/sda2
    udevadm test /sys/block/sda/sda3
    ...

  2. 用 mount -a 把全部的 partitions 掛上去。
    要是 / 還是唯讀,輸入 mount -o remount,rw / 把它掛成可以寫入。
  3. 去 /etc/init.d 下把沒打開的東西通通開一開,像是網路跟 sshd。
  4. 更新 kernel 設定檔,用老方法 make menuconfig 進入文字模式選單,然後:
  5. 取消萬惡的 CONFIG_SYSFS_DEPRECATED_V2:

    General setup --->
      [ ] enable deprecated sysfs features which may confuse old userspace tool

    把舊的 CONFIG_IDE 拔掉換成新的 CONFIG_ATA (在 2.6.33 版之後的 kernel 會正式把 CONFIG_IDE 給 deprecated 掉):

    Device Drivers --->
      < > ATA/ATAPI/MFM/RLL support --->
      <*> Serial ATA (prod) and Parallel ATA (experimental) drivers --->

    然後進去 CONFIG_ATA 的子選單把認為該勾的勾一勾就能存檔出去重編 kernel 安裝了。

  6. 聽說換成這種新設定以後,hda hdb 這類命名方式都會被改成 sda sdb,必須去更新一下 grub.conf 和 fstab 等等的設定檔。
    不過這應該是單顆 PATA/SATA 硬碟才會遇到,我是 hardware RAID 所以原本都是 sda sdb 這種命名規則不必動它。
  7. 重開機,應該就會抓到了。