18.04:非 RAID 笔记本电脑上的“md”进程

18.04:非 RAID 笔记本电脑上的“md”进程

在 MATE 桌面“系统监视器”中,我可以看到一个名为MD。但我有点不确定这是否真的是“多设备”(RAID)驱动程序。

首先,它的图标很不寻常。它是一个矩形,上面有三种不同颜色的垂直条纹:首先是蓝色,然后是黄色,然后是红色,黄色上面有某种徽章。它看起来很像安道尔国旗,如以下链接所示:

https://www.quora.com/What-c​​ountries-have-blue-yellow-and-red-flags/answer/Milorad-Boti%C4%87-1

(由于图标太小,我无法确定。)

在此处输入图片描述

其次,据我所知,“md”与软件 RAID 特别相关。但是这是一台只有一个硬盘的笔记本电脑(尽管分为多个分区)。

该进程显然没有打开文件或内存映射,并且正在运行

$which md

在终端上没有出现任何结果。

此外,md 不会显示在 lsmod 的输出中,并且没有

/dev/md*

/dev/md/*

/dev/md/name

文件在我的系统上,让我怀疑这是否真的是 md。

也许我有点偏执,但我觉得这有点可疑!有人能解释一下吗,尤其是关于如何查看这个不寻常图标的全尺寸版本?

回复评论的更新 - 1

$ grep CONFIG_MD /boot/config-$(uname -r)
CONFIG_MD=y
CONFIG_MD_AUTODETECT=y
CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
CONFIG_MD_RAID10=m
CONFIG_MD_RAID456=m
CONFIG_MD_MULTIPATH=m
CONFIG_MD_FAULTY=m
CONFIG_MD_CLUSTER=m
#snip all the CONFIG_MDIO results

$ ps -ef | grep -e '\[md\]' -e '\[kthreadd\]'
root         2     0  0 19:06 ?        00:00:00 [kthreadd]
root        47     2  0 19:06 ?        00:00:00 [md]

答案1

根据低 PID,您很可能看到的是内核线程。例如,在我的系统上(也没有任何 RAID 设备,也没有mdadm dmraid安装任何 raid 软件包),我看到以下内容:

$ ps -ef | grep -e '\[md\]' -e '\[kthreadd\]'
root         2     0  0 Mar10 ?        00:00:00 [kthreadd]
root        35     2  0 Mar10 ?        00:00:00 [md]

(注意该md进程的 PPID 是 的 PID kthreadd)。

查看我的内核配置文件,我发现它MD被配置为内置(因此你不会看到它使用lsmod):

$ grep CONFIG_MD= /boot/config-`uname -r`
CONFIG_MD=y

尽管大多数其他 RAID 功能模块提供。根据在 Linux 上管理 RAIDCONFIG_MD对于 LVM 也是必需的 - 所以也许这就是它默认启用的原因。


要弄清楚为什么您的系统监视器会针对此内核线程显示不同的图标,需要进行一些侦查。查看源代码gnome-system-monitor(我相信 Mate 系统监视器就是基于此源代码),我们在./src/prettytable.cpp以下函数中看到:

void
PrettyTable::set_icon(ProcInfo &info)
{
  typedef Glib::RefPtr<Gdk::Pixbuf>
    (PrettyTable::*Getter)(const ProcInfo &);

  static std::vector<Getter> getters;

  if (getters.empty())
    {
      getters.push_back(&PrettyTable::get_icon_from_gio);
#ifdef HAVE_WNCK
      getters.push_back(&PrettyTable::get_icon_from_wnck);
#endif
      getters.push_back(&PrettyTable::get_icon_from_theme);
      getters.push_back(&PrettyTable::get_icon_from_default);
      getters.push_back(&PrettyTable::get_icon_from_name);
      if (has_kthreadd())
        {
          procman_debug("kthreadd is running with PID 2");
          getters.push_back(&PrettyTable::get_icon_for_kernel);
        }
      getters.push_back(&PrettyTable::get_icon_dummy);
    }

  Glib::RefPtr<Gdk::Pixbuf> icon;

  for (size_t i = 0; not icon and i < getters.size(); ++i) {
    try {
      icon = (this->*getters[i])(info);
    }
    catch (std::exception& e) {
      g_warning("Failed to load icon for %s(%u) : %s", info.name.c_str(), info.pid, e.what());
      continue;
    }
    catch (Glib::Exception& e) {
      g_warning("Failed to load icon for %s(%u) : %s", info.name.c_str(), info.pid, e.what().c_str());
      continue;
    }
  }

  info.set_icon(icon);
}

要点似乎是它构建了一个图标“getters”列表,然后依次尝试每个图标,直到找到匹配项,最终get_icon_for_kernel在内核线程进程的情况下失败 - 这是返回applications-system您在其他进程中看到的默认“齿轮”图标的进程:

Glib::RefPtr<Gdk::Pixbuf>
PrettyTable::get_icon_for_kernel(const ProcInfo &info)
{
  if (is_kthread(info))
    return Glib::wrap(gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), "applications-system", APP_ICON_SIZE, GTK_ICON_LOOKUP_USE_BUILTIN, NULL));

  return Glib::RefPtr<Gdk::Pixbuf>();
}

因此,似乎其中一个优先级较高的“getter”错误地返回了与该md进程无关的图标。如果我们猜测这可能是基于进程名称,那么我们正在寻找安装名为 的图标的软件包md。标准 Ubuntu 存储库中的一个候选是

mate-icon-theme: /usr/share/icons/mate/scalable/animations/md.svg

在此处输入图片描述

这是摩尔多瓦共和国,谁的ISO 3166-1 alpha-2 代码为 md

答案2

与往常一样,第一步是阅读man md。或https://manpages.ubuntu.com/manpages/bionic/en/man4/md.4.html

使用内核参数进行启动raid=noautodetect(如中所述man md)对您有帮助吗?

相关内容