dmesg のアクセス制限を外す方法

dmesg を実行するとエラーが出る場合があります

$ dmesg 
dmesg: read kernel buffer failed: 許可されていない操作です

これは,Linuxカーネルの設定でアクセス制限を掛けているためです.

アクセス制限の設定

アクセス制限を外すには sysctl を使います./etc/sysctl.d/dmesg.conf というファイルを作成して以下の内容を書きます

kernel.dmesg_restrict=0

restrict (制限)を無効にする場合は"0"を設定します.有効にする場合は"1"です.

/etc/sysctl.d 以下の設定ファイルはシステム起動時に /sbin/sysctrl が自動で読み込みます.
設定を反映させるには,システムを再起動するか,root権限で以下のコマンドを実行します.

$ sudo /sbin/sysctl --system

アクセス制限のデフォルト設定

kernel.dmesg_restrictのデフォルト値は,カーネルのビルド時に決定されます.設定は CONFIG_SECURITY_DMESG_RESTRICT です.

動作のしくみ

Linuxカーネルソースコードを読んで動作の仕組みをしらべてみました.長くなったので別記事にしています

pyopyopyo.hatenablog.com

Linuxの起動が遅い原因の調査方法(その1)

Linuxの起動がものすごく遅い.10分ぐらい掛かる.そういう質問を受けたので原因調査の手順と解決法をまとめます.

起動時のログを見る方法

systemdにはシステム起動時のログを分析する機能があります.使い方も簡単

まずは systemd-analyze を実行します

$ systemd-analyze 
Startup finished in 3.328s (kernel) + 9min 57.615s (userspace) = 10min 944ms
graphical.target reached after 1min 36.168s in userspace

起動には10分944ミリ秒かかっていて,そのうち userspace の処理で 9分57秒も掛かっていることが解ります.たしかに遅い.

より詳細なログを見ます.systemd-analyze に blame オプションを付けます.

$ systemd-analyze  blame

以下のような表示がでました.

  9min 56.696s cron-weekly.service
     5min 2.388s cron-daily.service
         20.106s ssh.service
          5.000s networking.service
          1.018s ifupdown-wait-online.service
           632ms vmware-USBArbitrator.service
           548ms ifupdown-pre.service
           487ms udisks2.service
           438ms NetworkManager-wait-online.service
           426ms apt-daily.service
           403ms vmware.service
           366ms logrotate.service
           354ms ModemManager.service
           351ms apt-daily-upgrade.service
           242ms swap.swap.swap
           241ms systemd-logind.service
           209ms dev-sda2.device
           157ms avahi-daemon.service
          以下省略

問題があるのは先頭の2行

  9min 56.696s cron-weekly.service
     5min 2.388s cron-daily.service

この部分です. cron weekly と daily が猛烈に遅いようです.

cron-weekly の中身を調べます

$ ls /etc/cron.weekly/
man-db  systemd-cron

2つスクリプトがあります.man-db と systemd-cron です.

man-db は man page のデータベースを再構築する処理です.どうもこの処理に時間がかかっているようです

原因

このLinuxは,ストレージにSSDを使っていますが,SSDの空き容量がほぼゼロになっていました.
その結果ディスクの書き込みに時間が掛かる状態になっていて,man-db のデータベース再構築に9分ちかくかかっていました.

対処

不要なファイルを削除して SSD の空き容量を増やしました.これだけで解決しました.

まとめ

  • 起動時のログは systemd-analyze で確認できる
  • 詳細なログは systemd-analyze blame で確認できる
  • SSD は空き容量が不足するとディスクへの書き込みアクセスが劇的に遅くなる (2019年11月25日表現をあらためました)ディクスアクセスが劇的に遅くなる

SSDの空き容量は常に確認しておくべきですね.

参考情報

同様の手順でトラブル解決した件を,別エントリでまとめています.よろしければ併せてご覧ください!


pyopyopyo.hatenablog.com