在 MATE 桌面“系统监视器”中,我可以看到一个名为MD。但我有点不确定这是否真的是“多设备”(RAID)驱动程序。
首先,它的图标很不寻常。它是一个矩形,上面有三种不同颜色的垂直条纹:首先是蓝色,然后是黄色,然后是红色,黄色上面有某种徽章。它看起来很像安道尔国旗,如以下链接所示:
https://www.quora.com/What-countries-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 上管理 RAID,CONFIG_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
答案2
与往常一样,第一步是阅读man md
。或https://manpages.ubuntu.com/manpages/bionic/en/man4/md.4.html
使用内核参数进行启动raid=noautodetect
(如中所述man md
)对您有帮助吗?