David Both 发布的文章

请不要丢弃你的旧电脑。让我们跳过填埋场,利用 Linux 为它注入新的活力。

我的两位孙子,Mint 和 Kasen,请求我帮助他们搭建游戏电脑。他们的请求让我感到非常欣喜。这不仅给了我一个与他们共度时光的美好机会,也让我能够帮助他们了解科技。同时,我能深入探讨电脑对环境产生的影响。

等一下!这似乎有些离题,对吧?其实并非如此,本文就是为了阐述这个问题。

旧电脑的命运是什么?

关于旧电脑的处理(以及处理的原因)是我们讨论的核心。首先,普通电脑通常在提供服务五年左右后被替换。理由何在?

我在一个名为《CHRON》的面向小企业的刊物的在线文章中找到 这样一篇文章,电脑的寿命被建议在三至五年。这个建议的部分原因是,假定电脑在生命周期的这个阶段开始变慢。这篇文章,以及其他的一些文章,都在鼓励人们在大约同样的时间段内更换更新、速度更快的电脑。当然,这些压力主要来源于电脑和芯片的厂商,他们想要保持收入的增长。

再者,美国国税局也通过规定电脑所能完全折旧的时间是五年,以此间接强化了这个服务寿命的观念。

我们首先来讨论一下关于电脑会变慢的迷思。电脑实际上是不会变慢的,恒定的时钟速度一直在运作。无论是 2.8GHz 还是 4.5GHz,当电脑忙碌时,它们总是以那个速度运行。当然,当电脑闲置或事情不多时,将会有意识地降低它的时钟速度以节省电力。

电脑变慢并不是因为它们变老了。装有 Windows 系统的电脑在使用过程中,会积累大量的恶意软件、间谍软件、广告软件和恐吓软件。这些垃圾软件拖慢了电脑的运行。电脑用户逐渐认为这是正常的,安于电脑性能下降的境况。

Linux 驰骋救援

作为朋友和熟人心目中的电脑专家,人们有时会将他们不再需要的旧电脑送给我。他们认为电脑运行速度慢,因此选择交给我,并让我在将它们带到我家附近几个街区的电子设备回收中心之前清除硬盘数据。我总是建议他们,那些三到五年的老电脑其实仍然可用,但他们似乎更倾向于花费金钱换新,而非学习一个新的操作系统。

我已经收到过几台他人赠送的旧电脑。其中一个十分特别的是一台 Dell Optiplex 755,它配备了一个 2.33 GHz 的 Core 2 Duo 处理器以及 8GB 的 RAM。它的 BIOS 日期为 2010 年,所以现在大约应有 12 岁。这是我拥有的最老的电脑,我总是让它忙个不停。我已经使用它好几年了,且它从未变慢,这是因为我在它上面运行的是 Linux —— 如今是 Fedora 35。

如果你认为那是例外,那么我给你更多例子。十年前的 2012 年,我为自己组装了三台电脑,然后在它们所有上安装了 Fedora。至今,它们还在顺利运行,速度一如往昔。

这里没有例外,只有 Linux 系统在旧电脑上的正常运作。

使用 Linux 至少可以将电脑的使用寿命延长一倍,同时不需要任何额外花费。这就使得这些电脑在进入垃圾填埋场(最差情况)或回收中心(最好情况)之前,可以额外使用五到七年或更久。

只要我能找到这些电脑的替换零件,就可以使它们继续运行,远离任何垃圾处理或回收途径。有些电脑的问题在于找到合适的零部件。

非标准硬件

让我们讨论一下非标准硬件,以及你能在一些知名公司买到的电脑。正如我之前提到的,我有一台旧电脑是 Dell 的。Dell 是一家历史悠久的企业。尽管我不会购买 Dell 的台式机或塔式电脑,但是我会接受捐赠或者作为礼物赠予的 Dell 电脑。我可以在这些旧电脑上安装 Linux,去除 Windows,让它们重新发挥作用。它们在我的家庭实验室里作为测试计算机使用,等等。

然而,Dell 使用了一些你无法轻松替换的非标准零部件。当你能找到零部件(如电源和主板)时,它们并不便宜。原因在于,这些制造商设计了搭载非标准电源和主板的系统,只适配他们自家的非标准机箱。这是一种保持收入增长的策略。如果你在市场上找不到这些零部件,你就得去原厂买,并且价格通常非常高。

举例来说,我拥有的那台 Dell Optiplex 就使用了不符合通用标准的主板、机箱和电源。换句话说,Dell 的主板或电源可能无法适配我在当地电脑店或亚马逊上购买的标准机箱。这些部件也不适合我孙子们会使用的游戏机箱。主板和电源的安装孔不会与标准机箱对齐。电源适配器不符合标准机箱中可用的空间。而主板上的 PCI 插槽和后板接口在标准机箱中的位置会不对,电源的连接器也与标准主板上的不匹配。

最后,那些非标准部件中的一个或多个终究会出现故障,你可能完全找不到替代品,或者至少找不到价格合理的替代品。在这种情况下,处理旧电脑并采购新电脑就变得合情合理了。

标准件组装

让我们探讨一下使用标准化部件进行电脑组装,以及它们的长寿耐用如何适用于我正在帮助孙子们制造的游戏电脑。

大部分主板采用的设计是标准化的,包括微型 ATX、ATX,以及扩展版的 ATX。这些主板在规定的位置上设置了安装孔。许多孔位是重叠的,也就是说 ATX 主板上的孔位会和扩展版 ATX 主板的许多孔位对齐。这就意味着你可以在任何预钻了用于标准主板孔位的机箱中安装这些主板。这些主板都有标准的电源连接器,这意味着你可以配套使用任何标准电源。

在他们生日那天,我两个孙子都送给了一款有标准主板安装孔位的游戏电脑机箱。这些孔位的螺纹是标准的,因此他们可以使用任何主板配套提供的黄铜支架螺丝在这些主板安装孔位中。支架螺丝锁定入主板,并且自身设有适配标准主板锁定螺丝的标准螺纹孔。

这一切的结果就是他们可以在任何标准电脑机箱内,使用标准固定件和标准电源,安装任何标准主板。

需要注意的是,内存、处理器以及插卡设备都是标准化的,但是它们需要和主板兼容。所以旧款主板配套的内存可能已经买不到了。在这种情况下,你需要新的主板、内存和处理器。然而,电脑的其他部分仍然可以完好使用。

如我所告诉 Mint 和 Kasen 的那样,用全套标准部件组装(或购买)电脑就意味着你永远不需要买新电脑。我送给他们的这款优质机箱永远不必更换。随着时间的推移,可能有一些部件会出故障,但他们只需要换掉那些有缺陷的部件。这样一来,通过不断更新换代的标准部件,这些电脑将能经久耐用,且维护成本极低。如果有一个部件出故障,只需更换这一个部件,然后将故障部件回收。

这也极大地减少了你需要回收或者填入垃圾场的材料总量。

回收旧电脑配件

我很幸运,生活在一个提供路边回收服务的地方。这个服务虽然不包含电子设备,但周围的多个地方都可以接受电子设备回收,我便住在其中一个地方附近。我已经把很多旧的、不能使用的电子设备送去回收,包括出了故障的电脑配件,但我从未送过整机。

我会将这些出了故障的部件分类,用旧的纸箱存起来。按类别分类——一箱是电子设备,另一箱是金属,第三箱是电池,等等。这些箱子的内容与回收中心的分类相对应。等到一两个箱子满了,我就会送去回收。

结语

即使在为这篇文章和我之前的自我教育做了大量的研究,仍难以确定回收的电脑和电脑配件最终会去哪里。我所在附近的回收中心的网站指出,每种回收物料的运用都会依据它的经济价值来决定。电脑含有大量有价值的金属和稀土元素,因此总会被回收。

而这种回收是否以一种健康、环保的方式进行,这就是另一个话题了。到现在为止,我还无法追踪到送去回收的电子设备最后都去了哪里。我决定让自己尽自己的一份力,同时也要尽量保证回收链的其他环节也要设置得当,高效运行。

为了地球,我们最好让电脑尽可能长地运行。只更换故障的部件,能让一台电脑比目前承认的寿命还要运行得更久,这显著减少了我们需要填埋或回收的电子垃圾量。

当然,还要使用 Linux,这样你的电脑就不会变慢了。

(题图:MJ/7ac9becc-f966-49f4-86a9-29fb41a5fd38)


via: https://opensource.com/article/22/4/how-linux-saves-earth

作者:David Both 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 上的 dict 命令对作家来说非常有用,可以为他们的选词提供大量的字典和同义词。

作为一个作家,我经常需要确定单词的正确拼写或定义。我还需要使用词库来寻找替代词,这些词的内涵可能与我可能使用的词有些不同。因为我经常使用 Linux 命令行和文本模式工具来完成我的大部分工作,所以使用命令行词典是有意义的。

我非常喜欢使用命令行,原因有很多,其中最主要的原因是它对我来说更有效率。它也比任何一本或多本实体纸质字典,都要全面得多。我使用 Linux 的 dict 命令已经很多年了,我已经开始依赖它了。

在 Linux 上安装 dict

dict 程序在 Fedora 上没有默认安装,但它很容易安装。以下是如何在 Fedora 或类似发行版上安装:

$ sudo dnf install dictd

在 Debian 和类似发行版上,你还必须安装字典定义:

$ sudo apt install dictd dict-gcide

不需要额外的配置。这个非常简单的 /usr/share/doc/dictd/dict1.conf 文件指定了字典数据库的远程服务器。这个工具使用字典服务器协议(DICT),端口为 2628。

在 Linux 上使用 dict

在终端会话中,以非 root 用户的身份,输入 dict <word> 来获取一个或多个字典和词库的定义列表。例如,以这种方式查找 memory 这个词。

$ dict memory | less
6 definitions found

From The Collaborative International Dictionary of English v.0.48 [gcide]:

  Memory \Mem"o*ry\, n.; pl. {Memories}. [OE. memorie, OF.
     memoire, memorie, F. m['e]moire, L. memoria, fr. memor
     mindful; cf. mora delay. Cf. {Demur}, {Martyr}, {Memoir},
     {Remember}.]
     [1913 Webster]
     1. The faculty of the mind by which it retains the knowledge
        of previous thoughts, impressions, or events.
        [1913 Webster]

              Memory is the purveyor of reason.     --Rambler.
        [1913 Webster]

     2. The reach and positiveness with which a person can
        remember; the strength and trustworthiness of one's power
        to reach and represent or to recall the past; as, his
        memory was never wrong.
        [1913 Webster]
<SNIP>

From WordNet (r) 3.0 (2006) [wn]:

  memory
      n 1: something that is remembered; "search as he would, the
           memory was lost"
      2: the cognitive processes whereby past experience is
         remembered; "he can do it from memory"; "he enjoyed
         remembering his father" [syn: {memory}, {remembering}]
      3: the power of retaining and recalling past experience; "he had
<SNIP>

From Moby Thesaurus II by Grady Ward, 1.0 [moby-thesaurus]:

  78 Moby Thesaurus words for "memory":
     RAM, anamnesis, anniversaries, archetypal pattern, archetype,
     awareness, celebrating, celebration, ceremony, cognizance,
     commemoration, consciousness, disk memory, dressing ship,
<SNIP>

From The Free On-line Dictionary of Computing (30 December 2018) [foldoc]:

  memory

     <storage> These days, usually used synonymously with {Random
     Access Memory} or {Read-Only Memory}, but in the general sense
     it can be any device that can hold {data} in
     {machine-readable} format.

     (1996-05-25)


From Bouvier's Law Dictionary, Revised 6th Ed (1856) [bouvier]:

  MEMORY, TIME OF. According to the English common law, which has been altered
  by 2 & 3 Wm. IV., c. 71, the time of memory commenced from the reign of

为了节省空间,我删去了这个结果的大部分内容,同时留下了足够的信息,以提供一个典型结果的概念。你也可以用双引号或单引号将多字短语括起来进行查询。

$ dict "air gapped"

字典

dict 命令使用一些在线字典,包括法律和技术字典。许多语言的字典也是可用的。你可以“列出”可用的字典数据库,如下面所示:

$ dict -D | less
Databases available:
 gcide          The Collaborative International Dictionary of English v.0.48
 wn             WordNet (r) 3.0 (2006)
 moby-thesaurus Moby Thesaurus II by Grady Ward, 1.0
 elements       The Elements (07Nov00)
 vera           V.E.R.A. -- Virtual Entity of Relevant Acronyms (February 2016)
 jargon         The Jargon File (version 4.4.7, 29 Dec 2003)
 foldoc         The Free On-line Dictionary of Computing (30 December 2018)
 easton         Easton's 1897 Bible Dictionary
 hitchcock      Hitchcock's Bible Names Dictionary (late 1800's)
 bouvier        Bouvier's Law Dictionary, Revised 6th Ed (1856)
 devil          The Devil's Dictionary (1881-1906)
 world02        CIA World Factbook 2002
 gaz2k-counties U.S. Gazetteer Counties (2000)
 gaz2k-places   U.S. Gazetteer Places (2000)
 gaz2k-zips     U.S. Gazetteer Zip Code Tabulation Areas (2000)
 fd-hrv-eng     Croatian-English FreeDict Dictionary ver. 0.1.2
 fd-fin-por     suomi-português FreeDict+WikDict dictionary ver. 2018.09.13
 fd-fin-bul     suomi-български език FreeDict+WikDict dictionary ver. 2018.09.13
 fd-fra-bul     français-български език FreeDict+WikDict dictionary ver. 2018.09.13
 fd-deu-swe     Deutsch-Svenska FreeDict+WikDict dictionary ver. 2018.09.13
<SNIP>

你可以用 -d 选项指定单个字典:

$ dict -d gcide

总结

有时使用词库中的词汇并不是最好的写作方法,因为它可能会混淆你的意思。但我确实发现 dict 命令在为特定的意思选择最好的词方面有极大的帮助。它还能确保我使用的单词拼写正确。

关于 dict 的信息很匮乏。 这个 URL http://www.dict.org/ 只提供了一个基于网络的字典界面。手册页涵盖了语法。但是这个命令是一个有用的、有趣的命令,可以随身携带。我承认在发现 dict 命令后,我花了很多时间尝试不同的东西,看看结果会是什么。我就是那个通读百科全书和字典的孩子。是的,我是\_那个\_孩子。除了在写作或阅读时是一个有用的工具外,dict 也可以是一个有趣的工具来满足一下好奇心。


via: https://opensource.com/article/23/2/linux-dict-command

作者:David Both 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

好奇心能激发人们对于知识和真理的渴求,无论是对于硬件、开源软件、编程、组装个人电脑、优化系统设置,还是只是学习使用一个新软件。

 title=

我通常在家架设运行一个由一打计算机组成的家庭网络 —— 没错,正好 12 台计算机。同时我还负责其它地方的一些计算机维护工作。由于计算机很多,总会出现各种各样的故障,其中有很多最终确诊为硬件问题。但是要判定出是哪个硬件设备引发的故障却是一件难事。

就在这周,我的主工作站上出现了一个棘手的问题,导致我两次误判了问题的原因。本文将带你跟随我排查问题的过程。我将告诉你我在哪一步做了错误的判断以及为什么,还有误判是多么容易发生。

最初的症状

我手上一直有好几个项目。最近,我在几台台式机上打开了很多应用程序,我刚开始工作,突然就黑屏了。主工作站的大多数(不是全部)风扇都停了,这让我倒吸一口凉气。我从来没有遇到过这种情况,但显然我的系统出问题了。

我有两条主要线索可以跟进:一是显示黑屏,二是有些风扇不转了。但是前面板上的电源和磁盘活动指示灯还是亮的,只是比平常要暗一点。大多数安装在主板、内存条和风扇上的 RGB 装饰灯也都灭了。

我试过按电源键和重启键,都没有反应。我直接按供电单元的船型开关关闭了电源。重新供电后还是出现了刚才的症状。

最初的猜想

问题的现象和我数十年处理各类故障的经验将原因指向了供电问题。

我将供电单元拆了下来并用电源测试仪对它进行了检查。结果是供电单元没有任何问题,各项电压都符合规范。当然测试仪的结果也可能是错误的。测试仪并没有在满负荷状态下进行测试,比如计算机运行中耗电几百瓦的情况。我凭直觉更换了一个一千瓦的备用电源。

由于我的家庭网络中有 12 台计算机,我已经习惯准备了一些备用配件在身边。这样当有配件损坏时,我就不必非得跑一趟附近的电脑城或者网购后等快递了。由于计算机这么多,配件损坏是经常的事。

虽然电源测试仪告诉我电源没有问题,但更换电源后问题确实消失了。即便检测仪在过去都是正确的,我的经验、知识和直觉告诉我就是电源问题。

不幸的是,我的直觉错了。

第二个猜想

没过多久我的工作站再次又了相同的问题。但两个不同的供电单元有相同问题的可能性太低了。

我马上想到那一定是主板出问题了。我没有备用的主板,所以网购了一块新主板。我想到其实可以用上手上多余的内存条,然后把 CPU 连同一体水冷单元一起装到新主板上。

专业的故障排查

新主板需要几天天才能送到,所以我决定先将工作站上的旧主板拆下来。就在拔掉主板供电之前,我的好奇心显现,并驱使我给只剩主板、CPU 和内存的系统开机。我已经把其它的部分都拆掉了。

好的故障排除过程需要分离所有潜在变量,目前我只是对供电单元进行了测试。我需要对每个组件都进行测试。

这需要我先拔掉前面板上的扬声器和多功能面板连接线。多功能面板上集成了各种 USB、SATA 和内存卡插槽。

令人惊讶的是,当只有主板通电时竟然一切正常。

计算机本身无法开机,因为根本没有连接存储器。也不会有显示输出,因为我已经把显卡拆掉了。但是没有电源或主板故障的迹象。这进一步激发了我的好奇心。如果主板真的有问题的话,故障现象应该仍然存在才对。

所以我开始一系列的重复试验:断电,安装一个已经拆掉的配件,重新上电。

最终发现问题上由前置多功能面板引发的。

我拆除了多功能面板并将其它零件全部装了回去。工作站开机正常,运行良好。终于让我逮到罪魁祸首了。

起因

弄清真正的问题之后,我立刻就明白了问题的根本原因。这还要从几天前说起。那时我正在测试一些外接 USB 设备,包括几种摄像头、几个用于备份的存储设备和一个外接 USB 集线器。

我把一根 USB 连接线插到了多功能面板上的一个 USB 2.0 插口中。所有东西都停摆了,大部分灯熄灭了,风扇也不转了。USB 连接线发热很严重,我拔掉它时还把手指烫伤了。原来我不小心将连接线的 C 型插头插到了一个 USB 3.0 A 型插口里,导致了供电短路。

拔掉 USB 连接线之后,一切都恢复了“正常” —— 但事实并非如此。我粗心的错误对多功能面板造成了损伤,它在坚持了几天之后彻底短路了。

妄下结论

知识和经验有时候比电源测试仪之类的工具更重要。当然知识跟经验有时候也不管用。我最终找到了问题的真正原因,但其实我本该早就发现的。

尽管我在问题跟供电有关这一点上是对的,但还是误入歧途了。原因是我没能正确解读问题现象并根据线索调查得出逻辑结论导致的。我本可以更早找出问题的根本原因的,这样就不至于在修好主工作站之前浪费那么多时间在将我的笔记本变成临时主要设备上了。

系统管理员总与复杂的设备打交道,过早下结论在所难免。我有超过 50 年的从业经验,还是犯了这样的错误。我只需记住做几个 深呼吸,然后刨根问底直到找到问题的根本原因。

好奇心

至少在等待新主板到货期间,我遵循了自己的好奇心。这让我比等新主板到货要早得多将事情恢复正常。同时也避免了我在没有充分测试的情况下把一块完好的主板丢掉。

谚语说好奇心害死猫。我讨厌这个谚语,因为它被家长、学校、见识短浅的老板、老师和那些不想被我们这种好奇宝宝干扰的人用得太多了。事实上,好奇心激发了对于人们对于知识和真理的渴求。这可能是关于硬件、开源软件、编程、组装个人电脑、优化系统设置或者学习使用新软件。满足你的好奇心吧!


via: https://opensource.com/article/22/1/troubleshoot-hardware-sysadmin

作者:David Both 选题:lujun9972 译者:toknow-gh 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

zram 是一个用于创建内存压缩缓存的工具,特别是可以用作交换空间。

我在我的电脑上花了很多时间(我是说工作),我发现了很多有趣的东西。其中最近引起我注意的是 zram0 设备。我是在几个月前写一篇文章时第一次注意到它,它显示在 lsblk 命令的输出中:

# lsblk
NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda             8:0    0 931.5G  0 disk
├─sda1          8:1    0   600M  0 part
[...]
zram0         252:0    0     8G  0 disk [SWAP]

它被识别为交换空间,这就是首先引起我的好奇心的原因,所以我做了一些研究。zram 最初被称为 “ 压缩缓存 compcache ”,即 “压缩的高速缓存”。事实证明,zram 是一个用于创建内存内压缩缓存的工具,特别是作为交换空间使用。

但为什么呢?

当我开始研究 zram 时,我只发现了几篇关于将 zram 用于交换空间的基础文章。起初,这对我来说似乎有点违反直觉。毕竟,如果你的内存快用完了,你把页面交换到内存中的虚拟驱动器中,有什么好处呢?

然后我找到了 Fedora 项目的维基页面,它提议使用 zram 交换空间 swap-on-zram 。该建议说:“交换是有用的,除了它的速度很慢。zram 是一个使用了压缩的内存驱动器。在启动时创建一个 zram 交换空间,并且不再使用默认的交换分区。”

该页面的其余部分是关于它的细节、好处、副作用和反馈。

Linux 上用于交换空间的 zram

使用 zram 作为交换空间,与常规的基于分区或基于文件的交换空间做的事情相同。当内存压力过大时,一些最近使用最少的数据会被移到交换空间。平均来说,它会被压缩到其原始大小的 50% 左右,并被放置在内存的 zram 空间中。这比将这些内存页存储在硬盘上要快得多,并可以释放出它所使用的内存用于其他用途。

节省交换空间

我试图找到关于配置多少交换空间或 zram 交换空间的总结建议。这使我重新回顾了交换空间的设置,以及我之前的文章《现代 Linux 系统的正确交换空间是多少?》。就我所知,从 RHEL 和 Fedora 的最新文档来看,推荐的交换空间数量并没有改变。不过,该文档忽略了 zram 的使用。

然而,在不使用 zram 的旧版 Linux 或 zram 被禁用的情况下,之前文章中的表格仍然为交换空间的分配提供了一个好的起点。

我找到的关于 zram 功能的文档在 zram 如何根据内存大小分配空间,以及分配给 zram 交换空间的数量方面是不一致的。

由于缺乏权威性的文档,我进行了一些实验来凭经验确定用于分配 zram 交换空间的算法。我为此使用了我自己的物理和虚拟系统。结果很有趣,与我迄今为止发现的任何文档都不一致。

在所有足够大的系统上,zram 的默认大小是 8GB,但在内存较小的主机上通常会大大减少。在我用于测试的一台虚拟机(VM)上,可以访问 4GB 的内存,zram 的虚拟交换空间被分配为 3.8GB。我的一台旧戴尔电脑拥有 8GB 的内存,zram 被设置为 7.6GB。当内存减少到 2GB 时,zram 就减少到 1.9GB。

我拥有的所有内存超过 8GB 的物理和虚拟主机都显示正好是 8GB 的 zram。这包括我拥有 64GB 内存的主工作站和其他拥有 16GB 或 32GB 内存的主机。

基于这几个数据点,我可以得出这样的结论:目前的默认设置是最多 8GB 的 zram,而在 8GB 或以下的主机上,zram 占内存的 95%。

我读过一些文章,其中提到了 zram 交换空间的其他大小,甚至高达 100% 的内存,但这些似乎都是理论上的,而不是现实。

你的发行版可能不同,但这里是 Fedora 和类似发行版的实际 zram 交换空间的分配情况:

  • 内存 ⇐ 8 GB:0.95 × 内存
  • 内存 > 8 GB:8 GB

请注意,zram 交换空间大小的算法并没有基于对任何给定的现实世界的系统或应用程序的 “最佳” 交换大小的建议。这种 zram 交换空间的分配是一种相当概率性的方法,它应该在广泛的 Linux 主机上运行良好。然而,最大的 zram 交换空间大小被配置为 8GB,而且我一直推荐 8GB 作为传统交换空间的最大容量,我想我可以说它反映了 zram 交换空间的最佳大小。

管理 zram 交换空间

zram 的默认值保存在 /usr/lib/systemd/zram-generator.conf 配置文件中。以下是我的一个测试虚拟机,分配了 5097GB 的内存。

# cat /usr/lib/systemd/zram-generator.conf
# This config file enables a /dev/zram0 device with the default settings:
# - size - same as available RAM or 8GB, whichever is less
# - compression - most likely lzo-rle
#
# To disable, uninstall zram-generator-defaults or create empty
# /etc/systemd/zram-generator.conf file.
[zram0]zram-size= min(ram, 8192)

你可以在 zram-generator.conf 配置文件的最后一行改变默认的 zram 交换空间大小。但我建议不要这样做,除非你能明确说明这样做的原因,并在你做任何改变后测试你的结果。像 Linux 中的许多其他配置默认值一样,zram 的默认值已经被很好地测试过了,适合大多数使用情况。

监控 zram

可以使用 zramctl 工具来查看 zram 的当前状态。

# zramctl
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle       4.8G   4K   80B   12K       4[SWAP]

传统的 swapon 命令也可以用来查看交换,包括作为交换使用的 zram:

# swapon --show
NAME       TYPE      SIZE USED PRIO
/dev/zram0 partition 4.8G   0B  100

需要注意的是,zramctl 在不包含数据时不报告 zram,所以结果会包含空输出。而像 lsblkswapontopfreehtop 等工具,即使不包含数据,也会显示 zram。

停用 zram

swapoff -a 命令会关闭 zram 交换空间以及用作交换的传统 HDD 或 SSD 存储。swapon -a 命令在 zram 为空时不显示它,可以使用 zramctl /dev/zram0 代替。

# swapon --show# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             8:00  120G  0 disk
├─sda1          8:10    1G  0 part /boot/efi
├─sda2          8:20    1G  0 part /boot
└─sda3          8:30  118G  0 part
  ├─vg01-root 253:00   10G  0 lvm  /
  ├─vg01-swap 253:10    3G  0 lvm  [SWAP]
  ├─vg01-usr  253:10   30G  0 lvm  /usr
  ├─vg01-home 253:20   10G  0 lvm  /home
  ├─vg01-var  253:30   30G  0 lvm  /var
  └─vg01-tmp  253:40   10G  0 lvm  /tmp
sr0            11:01 1024M  0 rom
zram0         252:00    0B  0 disk
# zramctl## zramctl /dev/zram0
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo-rle         0B   0B    0B    0B       4

注意,/dev/zram0 在这些命令中并没有显示为交换空间,直到它被用于该目的。这给我造成了一些困惑,直到我的实验表明这是事实。

创建 zram 交换空间

zram 本身已经存在了大约 20 年,但只是在过去的一两年里才在一些发行版上作为交换空间使用。你的一些或所有主机上当前的 Linux 环境可能没有用 zram 创建交换空间。如果是这种情况,它可以很容易地被补救。

对于 Fedora 32,它是默认使用 zram 交换空间之前的最后一个版本,它只需要三个简单的命令。

首先,验证是否存在 zram-swap.service 文件,它作为 zram RPM 包的一部分安装:

# systemctl status zram-swap
● zram-swap.service - Enable compressed swap in memory using zram
     Loaded: loaded (/usr/lib/systemd/system/zram-swap.service; disabled; vendor preset: disabled)
     Active: inactive (dead)

接下来,安装 zram-generator-defaultszram-generator 软件包:

# dnf install zram-generator-defaults zram-generator

启用并启动 zram-swap 服务:

# systemctl enable zram-swap.service# systemctl start zram-swap.service

然后验证 zram0 是否存在并被用作交换空间:

# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:00  120G  0 disk
├─sda1          8:10    2G  0 part /boot
└─sda2          8:20  118G  0 part
  ├─vg01-root 253:00   10G  0 lvm  /
  ├─vg01-swap 253:10    3G  0 lvm  [SWAP]
  ├─vg01-usr  253:20   35G  0 lvm  /usr
  ├─vg01-tmp  253:30   15G  0 lvm  /tmp
  ├─vg01-var  253:40   35G  0 lvm  /var
  └─vg01-home 253:50   20G  0 lvm  /home
sr0            11:01 1024M  0 rom
zram0         252:00  7.5G  0 disk [SWAP]

用 zram 改进交换空间

这就是全部内容了。在 Fedora 上这很容易。不同的发行版可能也一样简单,只是软件包名称和命令的细节可能不同。在你的电脑上试试 zram 交换空间吧。在我的下一篇文章中,我将进一步演示一些 zram 选项。


via: https://opensource.com/article/22/11/zram-swap-linux

作者:David Both 选题:lkxed 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本文将比较非 root 用户提权为 root 用户的两个 Linux 命令 的区别。

susudo 命令都允许用户执行非特权用户不允许做的系统管理任务,即只有 root 用户能执行的命令。有些人更喜欢 sudo 命令:例如 Seth Kenlon 最近发布的一篇 《在 Linux 上使用 sudo 的 5 个理由》,他在其中详细阐述了 sudo 命令的许多优点。

但是,相较于 sudo 命令,我更偏好于 su 命令 来做系统管理工作。在本文中,我比较了这两个命令的区别,并解释了为什么我更喜欢 su 而不是 sudo,但我仍然同时使用这两个命令的原因。

过去的系统管理员主要使用 su 命令

susudo 命令是为不同的世界设计的。早期的 Unix 计算机需要全职系统管理员,他们使用 root 用户作为唯一的管理帐户。在这个古老的世界里,有管理员密码的人会在电传打字机或 CRT 终端(例如 DEC VT100)上以 root 用户登录,然后执行一些管理 Unix 计算机的工作。

管理员还会有一些非 root 帐户,用于执行一些非 root 的任务,例如编写文档和管理电子邮件等。在这些 Unix 计算机上通常有许多非 root 帐户,他们都不需要完全的 root 访问权限,只需要以 root 权限运行很少的命令,大约 1 至 2 个就可以了。许多系统管理员以 root 用户登录,完成 root 工作,并在任务完成后,退出 root 会话。有时候,系统管理员需要整天以 root 用户来登录,因为 sudo 命令需要键入更多的内容才能运行必要的命令,因此大多数系统管理员很少使用 sudo 命令。

sudosu 这两个命令都能够提权为 root 用户,但它们实现的方式大不相同。这种差异是由于它们最初打算用于不同的情况

sudo 命令

sudo 命令的初衷是让 root 用户能够让几个非 root 用户访问他们经常需要的一两个特权命令。sudo 命令允许非 root 用户暂时地获得更高权限,来执行一些特权命令,例如添加和删除用户、删除属于其他用户的文件、安装新软件以及管理现代 Linux 主机所需的任何命令。

sudo 命令允许非 root 用户访问一两个 需要更高权限 的常用命令,这样可以帮助系统管理员节省来自用户的许多请求,并减少等待时间。sudo 命令不会将用户帐户切换为 root 用户,因为大多数非 root 用户永远不应该拥有完全的 root 访问权限。在大多数情况下,sudo 允许用户执行一两个命令,然后提权就会过期。在这个通常为 5 分钟的短暂的提权时间内,用户可以执行任何需要提权的管理命令。需要继续使用提权的用户可以运行 sudo -v 命令来重新验证 root 访问权限,并将提权时间再延长 5 分钟。

使用 sudo 命令还有一些副作用,例如生成非 root 用户使用命令的日志条目及其 ID。这些日志可以在之后作为出现问题的检验,来给用户更多的操作培训。(你以为我会说“问责”用户,对吧?)

su 命令

su 命令能够将非 root 用户提权到 root 权限 —— 事实上,能让非 root 用户成为 root 用户。唯一的要求是用户知道 root 密码。因为用户已经以 root 权限登录,所以之后的操作就没有限制了。

su 命令所提供的提权没有时间限制。用户可以作为 root 执行命令,不需要进行重新验证是否有 root 权限。完成任务后,用户可以执行退出命令 exit,从 root 用户恢复到自己原来的非 root 帐户。

su 和 sudo 在使用上的争议和变化

最近在 susudo 的使用上存在一些分歧。

真正的系统管理员不会使用 sudo。—— Paul Venezia

Venezia 在他的 InfoWorld 文章 中辩称,对于许多担任系统管理员的人来说,sudo 是一个不必要的工具。他没有花太多时间为这个观点进行解释,他只是把它说成了一个事实。我同意他对于系统管理员的观点,因为我们不需要 sudo 来完成我们的工作。事实上,sudo 使得事情变得更复杂了。

然而,

时代在“改变”。—— Bob Dylan

Bob Dylan 是对的,尽管他唱的歌不是指计算机(LCTT 译注:Bob Dylan 是美国创作歌手、艺术家和作家,这里指他不是针对于电脑而说的)。

自从人手一台的个人计算机时代到来,计算机的管理方式发生了重大变化。在许多环境中,计算机的使用者也是它的管理员,这使得为这些用户提供一些对 root 权限的访问是有必要的。

一些现代发行版,例如 Ubuntu 及其衍生版本,只能使用 sudo 命令来执行特权命令。在这些发行版中,用户无法直接以 root 用户身份登录,甚至无法通过 su 切换到 root,因此需要 sudo 命令来允许非 root 用户获得 root 权限。在这一环境中,所有系统管理任务均使用 sudo 来执行。

通过锁定 root 帐户并将常规用户帐户添加到“轮子”组(wheel),可以实现此配置,但是这种配置很容易被绕过。接下来,让我们在 Ubuntu 主机或虚拟机上尝试一些小实验吧。我在这里说明一些我的设置,以便你可以根据需要来重现它。我安装的是 Ubuntu 16.04 LTS1,并使用 VirtualBox 将其安装在虚拟机中。在安装过程中,我创建了一个非 root 用户 student,为了简便起见我给这个用户设置了一个简单的密码。

student 用户身份登录 Ubuntu,并打开终端。查看 /etc/shadow 文件中的 root 条目,其中存储了经哈希的密码。

student@ubuntu1:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

可以看到终端拒绝了我们对 /etc/shadow 的访问,因此我们无法查看 /etc/shadow 文件。所有发行版都是如此,以防止非特权用户看到和访问加密的密码,因为非特权用户可能会使用常见的黑客工具来破解这些密码。

现在,让我们使用 su - 命令来成为 root 用户。

student@ubuntu1:~$ su -
Password: <Enter root password – but there isn't one>
su: Authentication failure

认证失败的原因是因为 root 帐户没有密码、并且被锁定了。接下来,使用 sudo 命令查看 /etc/shadow 文件。

student@ubuntu1:~$ sudo cat /etc/shadow
[sudo] password for student: <enter the student password>
root:!:17595:0:99999:7:::
<截取>
student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::
<截取>

在这里,我仅截取了部分结果,只显示 root 和 student 用户的条目。我还缩短了加密密码,以便该条目能显示在一行中。各个字段以冒号(:)分隔,第二个字段是密码。请注意,root 的密码字段是一个感叹号(!),这表明 root 帐户已被锁定,且无法使用。

现在,要将 root 帐户变成一个合适的系统管理员,你只需为 root 帐户设置密码。

student@ubuntu1:~$ sudo su -
[sudo] password for student: <Enter password for student>
root@ubuntu1:~# passwd root
Enter new UNIX password: <Enter new root password>
Retype new UNIX password: <Re-enter new root password>
passwd: password updated successfully
root@ubuntu1:~#

现在,你可以直接以 root 身份登录到控制台,或者直接使用 su 登录到 root,而不是在每个命令前都加一个 sudo。当然,你也可以在每次想以 root 身份登录时,使用 sudo su -,但这又是何必呢?

请不要误解我的意思。像 Ubuntu 这样的发行版及其上下游衍生版非常好,多年来我已经使用了其中的几个。在使用 Ubuntu 和相关发行版时,我做的第一件事就是设置一个 root 密码,这样我就可以直接以 root 身份登录。其他发行版,如 Fedora 及其相关发行版,现在在安装过程中提供了一些有趣的选择。我注意到的第一个 Fedora 版本是 Fedora 34,我在写我的一本即将出版的书时安装了很多次。

在安装页面上,可以找到其中一个安装选项,来设置 root 密码。这个新选项允许用户选择“ 锁定 root 帐户 Lock root account ”,就像 Ubuntu 锁定 root 帐户的方式一样。此页面上还有一个选项,允许使用密码以 root 身份远程 SSH 登录到此主机,但这仅在 root 帐户解锁时有效。第二个选项位于允许创建非 root 帐户的页面上。此页面上的选项之一是“ 让此用户成为管理员 Make this user administrator ”。选中此选项后,用户 ID 将添加到一个名为 wheel 组的特殊组中,该组授权该组的成员使用 sudo 命令。Fedora 36 甚至在该复选框的描述中提到了 wheel 组。

可以将多个非 root 用户设置为管理员。使用此方法指定为管理员的任何人都可以使用 sudo 命令在 Linux 计算机上执行所有管理任务。Linux 在安装时只允许创建一个非 root 用户,所以其他新用户可以在创建时添加到 wheel 组中。root 用户或其他管理员可以使用文本编辑器或 usermod 命令直接将现有用户添加到 wheel 组。

在大多数情况下,今天的管理员只需要执行一些基本任务,例如添加新的打印机、安装更新或新软件,或者删除不再需要的软件。这些 GUI 工具需要 root 或管理密码,并将接受来自管理员用户的密码。

在 Linux 上,我是怎么使用 su 和 sudo 的呢

同时使用 susudo。它们都是我所使用的很重要的系统管理员工具。

我不锁定 root 帐户,因为我需要用 root 帐户来运行我的 Ansible 脚本和我编写的 rsbu Bash 程序,来执行备份。这两个程序都需要以 root 身份运行,我编写的其他几个管理 Bash 的脚本也是如此。我使用 su 命令切换到 root 用户,这样我就可以执行这些脚本和许多其他常见的命令。当我需要确定问题和解决问题时,使用 su 命令将我的权限提升到 root 十分有用,因为我不希望 sudo 带来的提权会话超时。

当非 root 用户需要执行这些任务时,我使用 sudo 命令,来执行需要 root 权限的任务。我在 sudoers 文件中设置了非 root 帐户,只允许访问完成任务所需的一两个命令。当我只需要运行一两个需要提权的快速命令时,我自己也会使用 sudo 命令。

结论

实际上只要你把工作完成好了,你使用什么工具都无大碍。你使用的是 Vim 还是 Emacs,是 systemd 还是 SystemV,是 RPM 亦或是 DEB,是 sudo 亦或是 su,在结果上会有什么区别呢?这里的关键在于你应该使用最适合你的工具。Linux 和开源软件的最大优势之一是通常有许多选项可用于我们需要完成的任务。

susudo 都各有长处,如果正确使用的话,两者都是非常安全的。我选择同时使用 susudo 命令,基于它们的历史功能,因为这对我来说十分有用。对于我自己的大部分工作,我更喜欢 su 命令,因为它与我的工作流程最适配。

在评论区分享你喜欢的工作方式吧!

本文摘自于我的书《 系统管理员的 Linux 哲学 The Linux Philosophy for Sysadmins (Apress,2018 年)》一书的第 19 章,并经许可后重新发布。


via: https://opensource.com/article/22/6/linux-su-vs-sudo-sysadmin

作者:David Both 选题:lkxed 译者:chai001125 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Fedora 现场 USB 发行版为引导和进入恢复模式提供了有效的解决方案。

我的家庭实验室里有十几台物理计算机以及更多的虚拟机。这些系统中的大多数是我用来进行测试和实验的。我经常写使用自动化来简化系统管理任务的文章。我还在多个地方写过,我从自己的错误中学到的东西比几乎任何其他方式都多。

在过去的几周里,我学到了很多东西。

我给自己制造了一个大麻烦。作为多年的系统管理员,我写了数百篇关于 Linux 的文章和五本书,我应该对 Linux 更了解。话又说回来,我们都会犯错,这是一个重要的教训:你永远不会因为有经验而不犯错。

我不打算讨论我的错误的细节。告诉你这是一个错误就足够了,在我做之前我应该多考虑一下我在做什么。此外,细节并不是重点。经验不能让你免于犯下的每一个错误,但它可以帮助你恢复。这就是本文要讨论的内容:使用现场 USB 发行版启动并进入恢复模式。

问题

首先,我制造了问题,这本质上是 /etc/default/grub 文件的错误配置。接下来,我使用 Ansible 将错误配置的文件分发到我所有的物理计算机并运行 grub2-mkconfig。全部 12 个。这真的,真的很快。

除了两台之外,所有的都无法启动。它们在 Linux 启动的早期阶段崩溃,出现各种无法定位 /root 文件系统的错误。

我可以使用 root 密码进入“维护”模式,但是如果没有挂载 /root,即使是最简单的工具也无法访问。直接引导到恢复内核也不起作用。系统真的被破坏了。

Fedora 恢复模式

解决此问题的唯一方法是找到进入恢复模式的方法。当一切都失败时,Fedora 提供了一个非常酷的工具:用于安装 Fedora 新实例的 现场 USB Live USB 驱动器。

将 BIOS 设置为从现场 USB 设备启动后,我启动到 Fedora 36 Xfce 的 现场 live 用户桌面。我在桌面上打开了两个相邻的终端会话,并在两者中都切换到了 root 权限。

我在其中一个运行了 lsblk 以供参考。我使用该结果来识别 / 根分区以及 bootefi 分区。我使用了我的一台虚拟机,如下所示。在这种情况下没有 efi 分区,因为此 VM 不使用 UEFI。

# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0           7:0    0  1.5G  1 loop
loop1           7:1    0    6G  1 loop
├─live-rw     253:0    0    6G  0 dm   /
└─live-base   253:1    0    6G  1 dm   
loop2           7:2    0   32G  0 loop
└─live-rw     253:0    0    6G  0 dm   /
sda             8:0    0  120G  0 disk
├─sda1          8:1    0    1G  0 part
└─sda2          8:2    0  119G  0 part
  ├─vg01-swap 253:2    0    4G  0 lvm  
  ├─vg01-tmp  253:3    0   10G  0 lvm  
  ├─vg01-var  253:4    0   20G  0 lvm  
  ├─vg01-home 253:5    0    5G  0 lvm  
  ├─vg01-usr  253:6    0   20G  0 lvm  
  └─vg01-root 253:7    0    5G  0 lvm  
sr0            11:0    1  1.6G  0 rom  /run/initramfs/live
zram0         252:0    0    8G  0 disk [SWAP]

/dev/sda1 分区很容易识别为 /boot,根(/)分区也很明显。

在另一个终端会话中,我执行了一系列步骤来恢复我的系统。特定的卷组名称和设备分区(例如 /dev/sda1)因系统而异。此处显示的命令特定于我的情况。

目标是使用现场 USB 引导并完成启动,然后仅在镜像目录中挂载必要的文件系统,并运行 chroot 命令在 chroot 镜像目录中运行 Linux。这种方法绕过损坏的 GRUB(或其他)配置文件。但是,它提供了一个完整的运行系统,其中安装了所有原始文件系统以进行恢复,既是所需工具的来源,也是要进行更改的目标。

以下是步骤和相关命令:

  1. 创建目录 /mnt/sysimage 以提供 chroot 目录的位置。
  2. 将根分区挂载到 /mnt/sysimage
# mount /dev/mapper/vg01-root /mnt/sysimage
  1. /mnt/sysimage 设为你的工作目录:
# cd /mnt/sysimage
  1. 挂载 /boot/boot/efi 文件系统。
  2. 挂载其他主要文件系统。此步骤不需要像 /home/tmp 这样的文件系统:
# mount /dev/mapper/vg01-usr usr

# mount /dev/mapper/vg01-var var
  1. 绑定已挂载的重要文件系统,它们必须在已经 chroot 的系统和原始的现场系统之间共享,而后者仍然在外部运行:
# mount --bind /sys sys

# mount --bind /proc proc
  1. 一定要最后操作 /dev 目录,否则其他文件系统不能挂载:
# mount --bind /dev dev
  1. chroot 到系统镜像:
# chroot /mnt/sysimage

系统现在已经准备好了,无论你需要做什么,都可以把它恢复到一个工作状态。然而,有一次我能够在这种状态下运行我的服务器数天,直到我能够研究测试出真正的修复方法。我并不推荐这样做,但在紧急情况下,当有任务需要启动和运行时,这可能是一个选择。

解决方案

当我让每个系统进入恢复模式,修复就很容易了。因为我的系统现在就像成功启动一样工作,我只需对 /etc/default/grub/etc/fstab 进行必要的更改并运行 grub2-mkconfig > boot/grub2/grub.cfg 命令。我使用 exit 命令退出 chroot 环境,然后重启主机。

当然,我无法自动从我的意外事故中恢复过来。我必须在每台主机上手动执行整个过程,这是使用自动化快速和容易地传播我自己的错误的一点报应。

得到教训

尽管它们很有用,我曾经讨厌在我的一些系统管理员工作中举行的“经验教训”会议,但看来我确实需要提醒自己一些事情。因此,这里是我从这场自作自受的惨败中获得的“教训”。

首先,无法引导的十个系统使用了不同的卷组命名方案,而我的新 GRUB 配置没有考虑到这一点。我只是忽略了它们可能不同的事实。

  • 彻底考虑清楚。
  • 并非所有系统都相同。
  • 测试一切。
  • 验证一切。
  • 永远不要做假设。

现在一切正常。希望我也聪明一点。


via: https://opensource.com/article/22/9/recover-linux-system-live-usb

作者:David Both 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出