20230620-艾草

艾叶草 又称艾蒿 艾草是我国南方普遍都有的一种植物可食用可入药

  1. 艾叶可以用来泡脚洗澡

艾叶本身来说是一种用的比较多的重要,它除了可以用来服用以外,也可以用来泡澡,或者是泡脚,因为艾叶性质比较温,可以用来祛除体内的湿气和寒气,对于女性来说,宫寒,月经不调,痛经,用艾叶泡澡,有一定的效果。

它具有驱寒,驱除疲劳,促进睡眠,包括还有消毒杀菌的作用。因此用艾叶泡澡来说是比较好的,还可以可预防妇科疾病。但是对于阴虚体燥的人来说,艾叶泡澡并不适合。所以艾叶泡澡还是要根据个人的体质而定,要对症进行。

  1. 艾草与艾灸

正所谓“痛则不通”湿邪之风堵塞了流畅的气血,气血相冲,疼痛之感自然就跟着来了。艾草具有温热除湿驱寒,活血化瘀舒缓疼痛的作用,祛风除湿通经活络艾草是在我国民间一直被广泛使用的药草,具有祛风除湿、活血通络的功效。中医认为关节、风湿病的发生,与正虚、邪侵、痰浊淤血有关。对中医有关注的人都知道,艾,是个好东西。古语云:“艾草不离身,医家不登门”。艾草通络贴片经过多道工序细心研磨、提纯,将艾草精华融进膏药里,只要轻松一贴,艾草精华就会深层渗透,直达皮肤深层,起到祛风除湿,通络止痛的作用。

  1. 艾叶制作美食

以艾叶入膳自古就有,是古老的传统养生方法之一。清明前后的艾叶又鲜又嫩,是食用艾叶的最佳时间,可以用来制作艾叶红枣煮鸡蛋、艾青团(也叫艾叶青团或清明果子)、艾叶煎蛋、艾叶馒头等,以艾叶入食具有散寒、除湿、暖子宫、益气养血、安胎养神,适合痛经、月经不调或体质虚寒等功效。

  1. 艾叶通络贴片

正所谓“痛则不通”湿邪之风堵塞了流畅的气血,气血相冲,疼痛之感自然就跟着来了。艾草具有温热除湿驱寒,活血化瘀舒缓疼痛的作用,祛风除湿通经活络艾草是在我国民间一直被广泛使用的药草,具有祛风除湿、活血通络的功效。中医认为关节、风湿病的发生,与正虚、邪侵、痰浊淤血有关。对中医有关注的人都知道,艾,是个好东西。古语云:“艾草不离身,医家不登门”。艾草通络贴片经过多道工序细心研磨、提纯,将艾草精华融进膏药里,只要轻松一贴,艾草精华就会深层渗透,直达皮肤深层,起到祛风除湿,通络止痛的作用。

注意事项

1、用艾叶泡脚是很多朋友喜欢的养生方式,但应注意饭前饭饭后不宜立即泡脚,这时候泡脚往往容易导致出现头晕不适的症状。

2、由于艾叶烟熏时会有比较刺激的味道,对于有哮喘等唿吸道疾病的人群应慎用艾叶熏,防止病情加重。

3、艾叶的用量一定要避免过量使用,因为过量使用可对于肝脏造成一定的损伤。

艾草是草本植物,它的80%基本组成和烟草一样是纤维素和半纤维素,是有机物。艾草点燃后的烟雾与香烟一样含有非常复杂的成分,很多研究表明,艾烟确实有杀灭真菌和细菌的作用。安徽中医药大学研究用艾烟治疗皮肤病。记得非典时期,小汤山医院也确实用艾烟消毒。关键是:艾烟中同时含有很多有害物质,包括焦油、PM2.5、甲醛、一氧化碳、TVOC(总挥发性有机物)等。用艾烟消毒并不代表人吸入有好处!病房在消毒的时候哪个医生或者护士愿意待在正在消毒的房间内呢?有研究文献表明,一根艾条燃烧产生的焦油相当于20-40根中等焦油的香烟产生的焦油,您问问您的父母,他们是否愿意吸入如此浓度的焦油呢?艾烟有毒、有害是毫无疑问的,尤其是大浓度,长时间吸入。但是值得说明的是,历经数千年的中医传统艾灸能够提高人体的免疫力也是很多医案和现代研究已经证明的。别因为艾烟有害就否定艾灸疗法了。

20230620-applescript使用方法

什么是applescript

applescript 是苹果公司退出的一种脚本语言,内置macos 中,可以直接操作控制 macos 以及它的应用程序,是一个实现macos 自动化的一个极其有力地工具,applescript 的前身是一个hypercard 所使用得脚本语言 hypertalk

applescript的特点

与其他的脚本语言python 和JavaScript 相比,applescript 最显著的特点就是可以控制其他macos 上的应用程序,我们可以通过使用applescript来完成一些繁琐重复的工作,applescript 语法简单,接近自然语言,就像在和系统对话一样,另外系统也提供了语法查询字典,可以很方便的查询语法

applescript编辑器

macos上有自带的脚本编辑器,支持applescript,其中有模板工程,模板代码,应用词典等功能,非常方便脚本的编写

applescript 基础语法

按照管理,用applescript写一个hello world display dialog "hello, world!"

然后运行,就可以看到系统弹出了一个hello world 的弹窗

下面会介绍几种常用的语法

  1. 告诉xx 做xx 就像上边说的那样,applescript 的语法非常接近自然语言,如果你想让一个应用做一些任务,就可以直接告诉他就可以,语法类似于
1
2
3
tell 应用
做xx
end tell

启动safari 然后打开花椒

1
2
3
4
tell application “Safari”
activate
open location "https://www.huajiao.com/"
end tell

上述代码告诉了safari 启动,然后打开花椒,这个很接近于英语的表达方式

  1. 设置变量
1
set 变量名 to 值

把花椒直播的网址设置为变量huajiao

1
2
3
4
5
set huajiao to "https://www.huajiao.com/"
tell application "Safari"
activate
open location huajiao
end tell

把地址设置为huajiao变量,然后打开

  1. 条件语句
1
2
3
4
5
6
7
if 条件 then

else if 条件 then

else

end if

例如

1
2
3
4
5
6
7
8
9
10
11
12
set huajiao to "https://www.huajiao.com/"
set baidu to "http://www.baidu.com"
set num to 1

tell application "Safari"
activate
if num > 2 then
open location huajiao
else
open location baidu
end if
end tell
  1. 循环语句
1
2
3
4
5
6
7
8
9
10
11
12
repeat

exit repeat
end repeat

repeat while

end repeat

repeat with

end repeat

eg

1
2
3
repeat with num in [1, 2, 3]
display dialog "hello,word"
end repeat
  1. 模拟点击输入事件,系统会默认把所有支持applescript的应用的各种按钮名编号,类似于button 1 window1 可以通过这些名字直接定位到应用的各种按钮,找到你想要点击的按钮以后,就可以做一些点击输入等操作

首先如何快速拿到各个应用的按钮命名编号

  1. 可以通过entire contents 来打印区域内所有的ui 元素来查找元素,也最精确,例如打印 qq 页面元素

  2. 可以直接通过脚本编辑器内置的字典来查看已经安装的所有支持applescript的应用,列出来所有支持applescript 的app 以及各个app 所支持的接口调用

  3. 介绍一个第三方的软件 ui browser 可以通过直接看到各个软件按钮的名字,这样就可以方便的找到想要点击的按钮,target 选择你要操作的程序,选中对应控件后,勾选 hightlight 对应控件会高亮显示,例如找到qq的登陆页面关闭按钮 window 1 下的checkbox2

找到这个元素后

click 命令来点击按钮,keystroke 输入

1
click checkbox 2 of window "Window"

使用输入keystroke 输入一段内容

1
keystroke "abc"

或者key code 实现单个按键输入(Complete list of AppleScript key codes) 3)

set value of text field 1 of … to "abc"

applescript 应用举例

启动登陆qq

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set username to “123456789”
set qqpassword to “zhoujielun”
#启动QQ
tell application “QQ”
activate
end tell
delay 1
#输入账号密码
tell application “System Events”
set value of text field 1 of window “Window” of application process “QQ” to username
delay 2
set value of text field 2 of window “Window” of application process “QQ” to qqpassword
delay 1
click checkbox 3 of window “Window” of application process “QQ”
end tell

自动发送一个邮件

1
2
3
4
5
6
7
8
9
10
11
12
set theSubject to “邮件标题”
set recipientName to “test”
set recipientAddress to “2541740067@qq.com”
set theContent to “我是正文”

tell application “Mail”
set theMessage to make new outgoing message with properties {subject:theSubject, content:theContent, visible:false}
tell theMessage
make new to recipient with properties {name:recipientName, address:recipientAddress}
end tell
send theMessage
end tell

applescript 小结

applescript 是一个macos 上非常简单的ui 自动化控制脚本语言
无需代码基础即可做一些自动化控制
一些系统自带app 和第三方app 都暴露了很多提供脚本调用接口,完全可以将不同的应用串接起来完成一些流畅的自动化操作

applescript 官方文档

Introduction to AppleScript Language Guide

https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html


告诉xxx 做某事具有俄罗斯套娃的结构,如果你要具体到safari 的当前页面,那么就要访问它的front document 最前面的页面,代码就是在

tell application “safari” 结构里再嵌入一个 tell front document

1
2
3
4
5
6
7
tell application "Safari"
tell front document
-- 你希望应用 Safari 的当前页面做的事
-- 比如获得当前页面的网页标题,直接用 name 就行
name
end tell
end tell

这里的activate 和name 分别是applescript suite 里的类 command 和类的属性 property

现在不理解别担心,下一节会专门介绍什么事applescript suite 以及如何使它它

依此类推,你可以无限tell 下去

1
2
3
4
5
6
7
8
9
10
11
tell application "Safari"
tell front document
tell something
tell something
tell something
-- macOS:你够了!
end tell
end tell
end tell
end tell
end tell

模拟键盘操作

模拟键盘操作是applescript的另一个特长,有两条命令可用于模拟键盘操作

keystroke 一串字符
key code 键位编码

再运行applescript 时,尤其是模拟键鼠操作时候,经常需要等待一个应用被打开,一个窗口弹出才能继续执行下一步操作,那就需要让运行中的脚本暂停片刻
用delay 命令就好

delay 0.5 – 暂停 0.5 秒

注释

在代码中插入一些不会被执行的注释用于解释代码内容,可以让别人和自己看自己写的代码时更好动¥,applescript 中凡是双短线和井号 后的内容都会被认为是注释,不会被执行

-- 这是一条注释
# 这也是一条注释

applescript suite

applescript suite 就是applescript 类,及其元素和属性的集合

一个类,可以是一个数据,比如safari HTML文档,也可以是一个函数,帮你完成一个特定功能,比如往 omnifocus 里添加任务这个动作

parse tasks into

一个类中可能包含元素和属性,比如name 是document的一个属性,代表document 的名称

suite 是按照应用来分类的

safari suite

finder suite 访达 提供的applescript 类的集合,只适用于 访达

此外,你还能找到一个standard suite 标准脚本套件,它是系统的全局脚本套件,不局限于单个应用,可在任意场景下使用

在哪里可以找到 applescript suite 呢

  1. 系统原生的脚本词典,打开 脚本编辑器,新建一个脚本,用快捷键 打开applescript 字典,在这里你可以看到你的mac 上所有支持applescript 的应用的suite

目前你已经写出了一段可行的代码了,如果你之后经常使用它,可以通过automator 之类的软件界,新建一个服务,然后把这段代码粘贴到相关的动作中,被设为服务后这个自动化流程就可以在快捷键中设置被赋予快捷键,

20230617-夏季皮肤瘙痒,可别忽略这8大原因

夏天天气炎热,细菌容易滋生,人也容易出汗,于是就导致很多人都有夏季皮肤瘙痒的问题,

第一个原因 蚊虫叮咬

解决方案,日常生活中,避暑的同时还一定要做好 防蚊,驱蚊工作,尽量保护好自己的身体,不要让虫子叮咬到自己

第二个原因 洗澡次数过多

解决方案,洗澡时间不宜过长,且减少搓洗,适当的搓搓就可以了,这样可避免皮肤被过渡清洁而引起瘙痒,另外洗澡后,选择一款适合自己的身体乳,对身体进行滋润宝石,也能减少瘙痒程度

第三个原因 凉席没有经常擦洗

解决方案
初次使用得时候需先在阳光下晒晒,且需要定期用温水擦洗凉席,然后经常放在阳光下晾晒,对于身体爱出汗的人,税前最好在凉席上垫层吸汗的棉布

第四个原因 常带空调房,导致皮肤干痒

解决方案,因吹空调导致皮肤干痒的情况,可以在室内防止水或者空气加湿器,保证室内湿润,对于上班族可以使用便携式喷雾,当然日常多喝水也是必要的

第五个原因 季节性过敏

夏天皮肤瘙痒的原因是因为日光性皮炎和季节性过敏,很多人一进入夏天进入夏天就会起结性痒疹,但是进入秋天皮肤立马就变得不痒了。日光性皮炎—般在春夏季节长期日晒所引起

解决方案 平时注意防晒,出门尽量打伞

第六个原因 毛巾上诱真菌

解决方案,尽量每三个月换一次新毛巾,尽量让毛巾挂载通风处,诱太阳的时候可以晒一晒,阳光中的紫外线是天然的杀菌剂

第七个原因 物质过敏

夏季皮肤瘙痒,也可能时是因为外界物质所引起过敏,例如防晒霜、花露水,强减性的洗护用品、化纤制品、消毒剂、除臭剂、燃料等刺激性物质引起的皮肤瘙痒。

解决方案,洗护用品选择时,尽量选择弱酸性的,其他化妆品先做皮肤过敏小实验,确保不过敏以后再大范围使用

第八个原因 内分泌失调

如果身体因为某些原因而导致新陈代谢不对、内分泌失调的话,也是会引起皮肤瘙痒的,这种皮肤瘙痒不仅是需要擦一点药,而且还需要内调,也就是说要吃药或者是通过改变自己的行为来让皮肤瘙痒的情况有所好转。一般建议去医院对症诊断确定,以免延误病情。

20230614-手机充电协议

手机快充协议

各家厂商为了提升充电速度于是发展出了多种快充协议快充,不同厂家选择的充电电压和电流都不同,所以需要一个协议在充电器和手机间进行协调,确保手机不会被过大的电流充坏

USB PD 是目前通用性最高的公共协议之一,从iPhone、MacBook、市面上大部分采用 Type-C 接口的 Android 设备乃至 Nintendo Switch,都能使用这种协议进行快充。

换句话说,如果你日常使用 Android 作为主力机,同时还有一部 iPhone 备用,游戏机是 Nintendo Switch,工作还需要用到笔记本电脑,理论上来说这些设备都可以使用同一个支持 PD 协议的电源来正常握手并实现快充。只要有type-c接口。

目前最新的usb_pd 3.0 支持100W的充电功率,具体准则分为了10W 18W 36W 60W和100W五种,预期相对应的电压则有5V 12V 与20V 最大支持电流有1.5A 2 3 5 等不同的档位

私有协议

高通 QC
QuickCharge,是由高通主导的快速充电技术。 主要解决硬件不同环境下的电池快速充电。 以是高通QC2.0为例,在不改变接口的情况下进一步提高充电速度,就需要引入更高的充电电压(HVDCP)。

1、高通为usb接口设计了一套通过改变USB接口的d+、d-两脚电压,实现充电头手机相互识别的握手协议。

2、在手机通过握手协议申请更高电压后,充电器就输出手机申请的电压。这就是高通QC2.0的充电方式。

3、根据电压档位的不同,又可以细分为classa和classb两个版本。其中A级标准支持5V、9V和12V三种电压,适用于智能手机、平板电脑以及其它便携式电子设备。

4、B级则支持20V电压,最大可以输出40w功率,应用用对充电速度要求更高的设备。

联发科 PE
联发科的快冲标准是Pump Express,就像高通的QuickCharge技术一样,也是一项用于移动设备为主的快冲协议,支持这个协议的设备和充电头在握手之后(通过充电电流的大小来触发协议,随后触发升压或者降压),可以通过提升电压及电流,实现快冲的效果。

vivo:FlashCharge
这是vivo品牌手机采用的一种大功率快充技术,与其他快充技术一样,通过更高的充电功率实现较短的充电时间,由于在芯片端采用的是独家的协议,因此无法在其他品牌或不支持该快充技术的充电头、手机中使用;

华为:FCP & SCP
FCP和SCP是华为推出的快充协议,前者是18W快充,9V/2A(比较早),后者是超级快充(充电时手机会显示超级快充)(2016年发布),22.5W快充和40W快充,4.5V/5A或5V4.5A往上,另外有的手机只支持22.5W快充的话,不会显示超级快充,但升级系统后支持超级快充,并显示超级快充,有些手机同时这两种快充(22.5W和40W快充)。

小米ChargeTurbo快充协议
目前小米快充有50W、40W、30W等快充规格。

小米采用高通骁龙处理器的机型对QC快充协议具有不错的支持,例如小米10至尊版支持QC5.0,小米10 Pro支持QC4+,两者都兼容PD3.0。

OPPO: VOOC系列快充
早在14年的时候,OPPO就推出了VOOC 1.0,与主流快充采用高压方式不同,VOOC闪充采用的是低压高电流的方案。

相比传统的高压快充,低压快充温控更好,效率更高,3000毫安时的Find7可以在30分钟内充电到75%,要知道当时还是2014年。

此外由于电池系统、线材、充电头都被重新定制过的,所以一般充电器都不适配VOOC闪充。

三星:AFC
三星出品的Adapting Fast Charger同时向下兼容兼容QC2.0。

各个厂商各自的技术,一般来说要搭配自家的充电器才能使用,不同的私有协议不互通,你用华为的scp就算是40w也不能给oppo充40w。

不同协议之间的区别

高电压 低电流

高电压、低电流充电方式需要到手机端进行变压,让电压下降到适合手机电池消化的范围。期间的能量损耗会以热能形式散发出来,这也导致了手机充电发热问题。高电压、低电流充电方式需要到手机端进行变压,让电压下降到适合手机电池消化的范围。期间的能量损耗会以热能形式散发出来,这也导致了手机充电发热问题。

低电压 大电流

低电压、大电流方案的主要缺点则是较高的定制成本、以及低适用性。手机内部相关元件、充电头和充电线,都需要根据需求定制。以线材为例,常见的通用充电线材只能承载3A的电流,要实现5A大电流快充,就必须对充电线进行改造。我们看到当年在快充上投入大量宣传的OPPO、Vivo的充电头更大、充电线更粗,就是基于这个原因。

动态调整

动态调整的快充,基本是基于多电芯(电荷泵)串联和将电压的转换操作交给充电头,然后通过充电头而非手机去做细节的电压变动来实现的。

目前很多的厂家的快充都开始基于pps 可编程电源,从而实现高功率 大于100W 充电,也许有一天能出现一统江湖的协议也说不一定

20230614-fdisk:linux下管理磁盘分区的利器

一块硬盘可以被划分成一个或多个逻辑磁盘,我们将其称作分区。我们对硬盘进行的划分信息被储存于建立在扇区 0 的分区表(MBR 或 GPT)中。

Linux 需要至少一个分区来当作根文件系统,所以我们不能在没有分区的情况下安装 Linux 系统。当我们创建一个分区时,我们必须将它格式化为一个适合的文件系统,否则我们就没办法往里面储存文件了。

要在 Linux 中完成分区的相关工作,我们需要一些工具。Linux 下有很多可用的相关工具,我们曾介绍过 Parted 命令。不过,今天我们的主角是 fdisk

人人都喜欢用 fdisk,它是 Linux 下管理磁盘分区的最佳利器之一。它可以操作最大 2TB 的分区。大量 Linux 管理员都喜欢使用这个工具,因为当下 LVM 和 SAN 的原因,并没有多少人会用到 2TB 以上的分区。并且这个工具被世界上许多的基础设施所使用。如果你还是想创建比 2TB 更大的分区,请使用 parted 命令 或 cfdisk 命令。

对磁盘进行分区和创建文件系统是 Linux 管理员的日常。如果你在许多不同的环境中工作,你一定每天都会重复几次这项操作。

Linux 内核是如何理解硬盘的?

作为人类,我们可以很轻松地理解一些事情;但是电脑就不是这样了,它们需要合适的命名才能理解这些。

在 Linux 中,外围设备都位于 /dev 挂载点,内核通过以下的方式理解硬盘:

  • /dev/hdX[a-z]: IDE 硬盘被命名为 hdX
  • /dev/sdX[a-z]: SCSI 硬盘被命名为 sdX
  • /dev/xdX[a-z]: XT 硬盘被命名为 xdX
  • /dev/vdX[a-z]: 虚拟硬盘被命名为 vdX
  • /dev/fdN: 软盘被命名为 fdN
  • /dev/scdN or /dev/srN: CD-ROM 被命名为 /dev/scdN/dev/srN

什么是 fdisk 命令?

fdisk 的意思是 固定磁盘(Fixed Disk) 或 *格式化磁盘(Format Disk)*,它是命令行下允许用户对分区进行查看、创建、调整大小、删除、移动和复制的工具。它支持 MBR、Sun、SGI、BSD 分区表,但是它不支持 GUID 分区表(GPT)。它不是为操作大分区设计的。

fdisk 允许我们在每块硬盘上创建最多四个主分区。它们中的其中一个可以作为扩展分区,并下设多个逻辑分区。1-4 扇区作为主分区被保留,逻辑分区从扇区 5 开始。

img

如何在 Linux 下安装 fdisk?

fdisk 作为核心组件内置于 Linux 中,所以你不必手动安装它。

如何用 fdisk 列出可用磁盘?

在执行操作之前,我们必须知道的是哪些磁盘被加入了系统。要想列出所有可用的磁盘,请执行下文的命令。这个命令将会列出磁盘名称、分区数量、分区表类型、磁盘识别代号、分区 ID 和分区类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ sudo fdisk -l
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeab59449

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 20973568 62914559 41940992 20G 83 Linux


Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sde: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

如何使用 fdisk 列出特定分区信息?

如果你希望查看指定分区的信息,请使用以下命令:

1
2
3
4
5
6
7
8
9
10
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeab59449

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 20973568 62914559 41940992 20G 83 Linux

如何列出 fdisk 所有的可用操作?

fdisk 中敲击 m,它便会列出所有可用操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$ sudo fdisk /dev/sdc

Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xe944b373.

Command (m for help): m

Help:

DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag

Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition

Misc
m print this menu
u change display/entry units
x extra functionality (experts only)

Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file

Save & Exit
w write table to disk and exit
q quit without saving changes

Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table

如何使用 fdisk 列出分区类型?

fdisk 中敲击 l,它便会列出所有可用分区的类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ sudo fdisk /dev/sdc

Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x9ffd00db.

Command (m for help): l

0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT

如何使用 fdisk 创建一个磁盘分区?

如果你希望新建磁盘分区,请参考下面的步骤。比如我希望在 /dev/sdc 中新建四个分区(三个主分区和一个扩展分区),只需要执行下文的命令。

首先,请在操作 “First sector” 的时候先按下回车,然后在 “Last sector” 中输入你希望创建分区的大小(可以在数字后面加 KB、MB、G 和 TB)。例如,你希望为这个分区扩容 1GB,就应该在 “Last sector” 中输入 +1G。当你创建三个分区之后,fdisk 默认会将分区类型设为扩展分区,如果你希望创建第四个主分区,请输入 p 来替代它的默认值 e

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ sudo fdisk /dev/sdc

Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): Enter

Using default response p.
Partition number (1-4, default 1): Enter
First sector (2048-20971519, default 2048): Enter
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +1G

Created a new partition 1 of type 'Linux' and of size 1 GiB.

Command (m for help): p
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cc8f9e5

Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2099199 2097152 1G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

如何使用 fdisk 创建扩展分区?

请注意,创建扩展分区时,你应该使用剩下的所有空间,以便之后在扩展分区下创建逻辑分区。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ sudo fdisk /dev/sdc

Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type
p primary (3 primary, 0 extended, 1 free)
e extended (container for logical partitions)
Select (default e): Enter

Using default response e.
Selected partition 4
First sector (6293504-20971519, default 6293504): Enter
Last sector, +sectors or +size{K,M,G,T,P} (6293504-20971519, default 20971519): Enter

Created a new partition 4 of type 'Extended' and of size 7 GiB.

Command (m for help): p
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cc8f9e5

Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2099199 2097152 1G 83 Linux
/dev/sdc2 2099200 4196351 2097152 1G 83 Linux
/dev/sdc3 4196352 6293503 2097152 1G 83 Linux
/dev/sdc4 6293504 20971519 14678016 7G 5 Extended

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

如何用 fdisk 查看未分配空间?

上文中,我们总共创建了四个分区(三个主分区和一个扩展分区)。在创建逻辑分区之前,扩展分区的容量将会以未分配空间显示。

使用以下命令来显示磁盘上的未分配空间,下面的示例中显示的是 7GB:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo fdisk /dev/sdc

Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): F
Unpartitioned space /dev/sdc: 7 GiB, 7515144192 bytes, 14678016 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

Start End Sectors Size
6293504 20971519 14678016 7G

Command (m for help): q

如何使用 fdisk 创建逻辑分区?

创建扩展分区后,请按照之前的步骤创建逻辑分区。在这里,我创建了位于 /dev/sdc51GB 逻辑分区。你可以查看分区表值来确认这点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ sudo fdisk /dev/sdc

Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
All primary partitions are in use.
Adding logical partition 5
First sector (6295552-20971519, default 6295552): Enter
Last sector, +sectors or +size{K,M,G,T,P} (6295552-20971519, default 20971519): +1G

Created a new partition 5 of type 'Linux' and of size 1 GiB.

Command (m for help): p
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cc8f9e5

Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2099199 2097152 1G 83 Linux
/dev/sdc2 2099200 4196351 2097152 1G 83 Linux
/dev/sdc3 4196352 6293503 2097152 1G 83 Linux
/dev/sdc4 6293504 20971519 14678016 7G 5 Extended
/dev/sdc5 6295552 8392703 2097152 1G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

如何使用 fdisk 命令删除分区?

如果我们不再使用某个分区,请按照下面的步骤删除它。

请确保你输入了正确的分区号。在这里,我准备删除 /dev/sdc2 分区:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$ sudo fdisk /dev/sdc

Welcome to fdisk (util-linux 2.30.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-5, default 5): 2

Partition 2 has been deleted.

Command (m for help): p
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8cc8f9e5

Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2099199 2097152 1G 83 Linux
/dev/sdc3 4196352 6293503 2097152 1G 83 Linux
/dev/sdc4 6293504 20971519 14678016 7G 5 Extended
/dev/sdc5 6295552 8392703 2097152 1G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

如何在 Linux 下格式化分区或建立文件系统?

在计算时,文件系统控制了数据的储存方式,并通过 索引节点(Inode Tables) 来检索数据。如果没有文件系统,操作系统是无法找到信息储存的位置的。

在此,我准备在 /dev/sdc1 上创建分区。有三种方式创建文件系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo mkfs.ext4 /dev/sdc1

$ sudo mkfs -t ext4 /dev/sdc1

$ sudo mke2fs /dev/sdc1

mke2fs 1.43.5 (04-Aug-2017)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: c0a99b51-2b61-4f6a-b960-eb60915faab0
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

当你在分区上建立文件系统时,以下重要信息会同时被创建:

  • Filesystem UUID: UUID 代表了通用且独一无二的识别符,UUID 在 Linux 中通常用来识别设备。它 128 位长的数字代表了 32 个十六进制数。
  • Superblock: 超级块储存了文件系统的元数据。如果某个文件系统的超级块被破坏,我们就无法挂载它了(也就是说无法访问其中的文件了)。
  • Inode: Inode 是类 Unix 系统中文件系统的数据结构,它储存了所有除名称以外的文件信息和数据。
  • Journal: 日志式文件系统包含了用来修复电脑意外关机产生下错误信息的日志。

如何在 Linux 中挂载分区?

在你创建完分区和文件系统之后,我们需要挂载它们以便使用。我们需要创建一个挂载点来挂载分区,使用 mkdir 来创建一个挂载点。

1
$ sudo mkdir -p /mnt/2g-new

如果你希望进行临时挂载,请使用下面的命令。在计算机重启之后,你会丢失这个挂载点。

1
$ sudo mount /dev/sdc1 /mnt/2g-new

如果你希望永久挂载某个分区,请将分区详情加入 fstab 文件。我们既可以输入设备名称,也可以输入 UUID。

使用设备名称来进行永久挂载:

1
2
3
# vi /etc/fstab

/dev/sdc1 /mnt/2g-new ext4 defaults 0 0

使用 UUID 来进行永久挂载(请使用 blkid 来获取 UUID):

1
2
3
4
5
6
7
8
9
$ sudo blkid
/dev/sdc1: UUID="d17e3c31-e2c9-4f11-809c-94a549bc43b7" TYPE="ext2" PARTUUID="8cc8f9e5-01"
/dev/sda1: UUID="d92fa769-e00f-4fd7-b6ed-ecf7224af7fa" TYPE="ext4" PARTUUID="eab59449-01"
/dev/sdc3: UUID="ca307aa4-0866-49b1-8184-004025789e63" TYPE="ext4" PARTUUID="8cc8f9e5-03"
/dev/sdc5: PARTUUID="8cc8f9e5-05"

# vi /etc/fstab

UUID=d17e3c31-e2c9-4f11-809c-94a549bc43b7 /mnt/2g-new ext4 defaults 0 0

使用 df 命令亦可:

1
2
3
4
5
6
7
8
9
10
11
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 969M 0 969M 0% /dev
tmpfs 200M 7.0M 193M 4% /run
/dev/sda1 20G 16G 3.0G 85% /
tmpfs 997M 0 997M 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 997M 0 997M 0% /sys/fs/cgroup
tmpfs 200M 28K 200M 1% /run/user/121
tmpfs 200M 25M 176M 13% /run/user/1000
/dev/sdc1 1008M 1.3M 956M 1% /mnt/2g-new

20230613-synology群晖ssh命令清单大全

群晖本质上还是一个Linux系统,也可以通过ssh来连接,并且可方便使用ssh命令行来管理 。群晖打开ssh命令行的设置很简单,进入控制面板,找到终端机和SNMP, 勾选上启动SSH功能即可,如果你有防火墙,需要在防火墙放行22端口:

一、常用命令

nas打印工作组

synowin -getWorkgroup

加入新的 NAS 工作组:

1
synowin -joinWorkgroup <group>

打印一般信息:

synoservice –status

通过 cli 设置邮件:

synosyslogmail

检查升级:

synoupgrade –check 3

转储有关您的 nas 的数据:

syno_system_dump

打印网络信息包括。当前双工:

synonet –show

打印当前主机名:

synonet –get_hostname

设置一个新的主机名:

synonet –set_hostname

设置新网关:

synonet –set_gateway gateway

WOL 唤醒:

synonet –wake xx:xx:xx:xx:xx:xx

打印分区布局表。

synopartition –list

二、共享相关命令

打印有关共享的信息:

synoshare –get

挂载共享加密文件夹:

synoshare –enc_mount

卸载加密文件夹:

synoshare –enc_unmount

允许删除:

synoshare –del {TRUE|FALSE} sharename1 sharename2 …

为共享文件夹设置描述(在文件浏览器的评论中查看)

synoshare –setdesc sharename desc

允许浏览共享文件夹

synoshare –setbrowse sharename browse_flag{0|1}

重命名共享文件夹:

synoshare –rename old_sharename new_sharename

设置允许浏览共享文件夹的用户:

synoshare –setuser sharename user_auth{NA|RO|RW} operator{+|-|=} user_name_list_with_comma

三、用户相关命令

打印有关用户的主要数据

sh-4.3# synouser –get wuseman

User Name : [wuseman]

User Type : [AUTH_LOCAL]

User uid : [1026]

Primary gid : [100]

Fullname : []

User Dir : [/var/services/homes/wuseman]

User Shell : [/bin/sh]

Expired : [false]

User Mail : []

Alloc Size : [82]

Member Of : [2]

(100) users

(101) administrators

设置新密码/更改密码:

synouser –setpw oldpassword newpassword

重命名用户:

synouser –rename old_username new_username

添加包含完整信息的用户名:

synouser –add [username pwd “full name” expired{0|1} mail privilege]

四、通知相关命令:

发送有关存储的电子邮件:

synostorage –mail

锁管理

synostorage –lock

五、调优功能:

获取当前调整配置文件:

synotune –get

Outut: Current Profile: performance_throughput

设置新功能,选项:

synotune –set performance_throughput OR performance_latency

转储有关您的 Synology NAS 的信息:

syno_system_dump

六、升级相关命令

将您的 nas 设置为自动处理升级:

synoupgrade –auto

检查您当前的升级设置:

synoupgrade –check

如果有新的,请下载最新的升级:

synoupgrade –download

开始升级:

synoupgrade –start

检查分区布局表:

synopartition –check /dev/sd

查看群晖 NFS 监视器:

synonfstop

七、重置Synology Nas 和其它命令

重置 Synology NAS(仅限设置)

/usr/syno/sbin/./synodsdefault –reset

将 Synology Nas 重置为出厂默认设置(OBS OBS OBS ALL DATA 将被擦除)

/usr/syno/sbin/./synodsdefault –factory-default

重新安装 Synology Nas Station,将保留所有数据:

/usr/syno/sbin/./synodsdefault –reinstall; reboot

通过 cli 重启 NAS SSHD 的正确方法:

synoservicectl –restart sshd

列出、卸载或安装 .spk 包文件(本地可用)

synopkg

安装一组网络和 ELF 二进制调试工具(并进入根会话)

synogear

使用键=值对行编写和读取 .ini 样式文件

synosetkeyvalue

synogetkeyvalue

关闭并关闭 NAS(很像 shutdown -h now)

synopoweroff

显示已安装的包

1
synopkg list | sed 's/: .*$//'

卸载软件包

sudo synopkg uninstall

Synology 也关机和关机

syno_poweroff_task

为本地用户设置/建立密码

synoauth local_username password

管理 IP 自动阻止功能

synoautoblock OPTIONS

管理博客功能

1
synoblog_backup [-r|-b] p [-u username] [-o]

Synology 磁盘控制设备:类似于 /dev/hda 或 /dev/sda

syno_disk_ctl OPTIONS DEVICE

Synology clear .tbd-文件工具

SYNOClearTdb FILE

打印有关 NAS 的各种信息的不同方法

more /etc.defaults/VERSION

cat /etc/synoinfo.conf

cat /proc/cmdline

synoshare –enum ALL

synonet –show

synodisk –enum

synospace –enum -a

重启索引

synoservicectl –restart synoindexd

检查升级

sudo synoupgrade –check

重启网络服务器

/usr/syno/sbin/synoservicecfg –restart httpd-user

/usr/syno/sbin/synoservicectl –restart pkgctl-WebStation

为您可以控制的内容生成列表

/usr/syno/sbin/synoservice –list

DSM API - 提供 DSM 信息

syno dsm getInfo –pretty

File Station API - 提供 File Station 信息

syno fs getInfo –pretty

File Station API - 枚举给定文件夹中的文件

syno fs listFiles –payload ‘{“folder_path”:”/path/to/folder”}’ –pretty

Download Station API - 列出下载任务

syno dl listFiles –payload ‘{“limit”:5, “offset”:10}’ –pretty

Download Station API - 创建下载任务

1
syno dl createTask --payload '{"uri":"[https://link](https://link.zhihu.com/?target=https%3A//link)"}'

Audio Station API - 搜索歌曲

syno as searchSong –payload ‘{“title”:”my_title_song”}’ –pretty

Video Station API - 列出电影

syno vs listMovies –payload ‘{“limit”:5}’ –pretty

Video Station DTV API - 列出频道

syno dtv listChannels –payload ‘{“limit”:1}’ –pretty

Surveillance Station API - 获取摄像头信息

syno ss getInfoCamera –payload ‘{“cameraIds”:8}’ –pretty

重新启动、启用、停止 samba

/usr/syno/etc/rc.sysv/S80samba.sh –help

获取 Synology 日期

synodate –getSysDate

打印机的东西

synoprint

更新索引较旧

1
indexfolder --type={SHARE_CREATE|SHARE_REMOVE} --share=<SHARED_FOLDER> --share_path=<SHARED_FOLDER>

启动媒体服务器

/usr/syno/bin/mediaserver.sh start

小心,杀死NAS

servicetool –get-service-volume download

如果丢失,获取 2FA 密钥

1
ssh root@nas cat /usr/syno/etc/preference/wuseman/google_authenticator

以非常奇特的方式列出磁盘信息

dhm_tool -s

八、Synology 自动阻止

将 IP 添加到自动阻止数据库:

synoautoblock –deny

重置错误添加的IP:

synoautoblock –reset

将任何 IP 添加到白名单:

synoautoblock –in-white-list

九、调试和系统健康:

调试风扇并通过电子邮件发送结果(如果已设置电子邮件)

syno_fan_debug

运行系统健康检查并在完成后通过电子邮件发送结果:

syno_disk_health_record

检查〜剩余寿命:

syno_disk_remain_life_check

运行 smartmontools 并在完成后发送电子邮件:

syno_disk_smart_mail_send

调试休眠:

syno_hibernation_debug

LED(获取最小值和最大值:/usr/syno/etc.defaults/led_brightness.xml)

获取当前设置:

syno_led_brightness –get (Default on DS416: 1985157252)

设置新设置:

syno_led_brightness –set

十、带宽

打印用户带宽使用情况:

1
synobandwidth --status [<list=user|group|all(default)> <transfer=upload|download|all(default)>] <merge=0|1(default)>]

为用户设置新的带宽限制:

1
synobandwidth --set-global-conf <state=enabled|disabled> [<protocol=filestation|webdav|ftp|rsync|all(default)>

按用户打印所有服务的用户状态:

sh-4.3# synobandwidth –preview wuseman

Protocol Upload Download

filestation 0.00 0.00

webdav 0.00 0.00

ftp 0.00 0.00

rsync 0.00 0.00

十一、ISCI

Synology iSCSI 性能分析器

synoiscsitop40

4202977879.png

十二、风扇

设置风扇配置(最大声会听起来像飞机)

synofanconfig -parseXML 1000000

十三、列出了更多 Synology 命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
sync

synologconvert

[syno-dbus-check.sh](https://link.zhihu.com/?target=http%3A//syno-dbus-check.sh)

synologrotated

syno-letsencrypt

synologset

syno-move-coredump

synologset1

syno8021Xtool

synolunbackup

synoRTCTime

synolunbkp

syno_adv_test

synoluntransform

syno_dc_ctrl_adapter.sh

synomediaparserd

syno_disk_config_check

synomkflv

syno_disk_ctl

synomkflvd

syno_disk_data_collector

synomkthumb

syno_disk_db_update

synomkthumbd

syno_disk_dsl

synomoduletool

syno_disk_health_record

synomount

syno_disk_information_daily_record

synomustache

syno_disk_log_convert

synomyds

syno_disk_log_import_from_xml

synonclient_send

syno_disk_remain_life_check

synonet

syno_disk_smart_mail_send

synonetd

syno_disk_test_log_import_from_xml

synonetdtool

syno_disk_test_scheduler_set

synonetseqadj

syno_disk_testlog_convert

synonfstop

syno_disk_wcache_config_init

synonotify

syno_dvb_admin.sh

synootp

syno_fan_debug

synoovstool

syno_hdd_util

synopartition

syno_hibernation_debug

synopasswordmail

syno_hw_video_transcoding.sh

synopayment

syno_iptables_common

synoperfeventd

syno_led_brightness

synoperformancediagnose

syno_mem_check

synopftest

syno_pkgicon_sprite.py

synophoto_acl

syno_poweroff_task

synophoto_acl_pgsql

syno_scemd_connector

synophoto_autoblock

syno_smart_result_collect

synophoto_backup

syno_smart_test

synophoto_config

syno_ssd_trim

synophoto_config_root

syno_system_dump

synophoto_dsm_user

synoabnormalloginmail

synophoto_external_access

synoacltool

synophoto_extract_preview

synoagentregisterd

synophoto_music

synoappbkp

synophoto_sdk_share_set

synoappnotify

synophoto_sns_utils

synoapppriv_updater

synophoto_update_db

synoarchivetool

synophoto_watermark_util

synoauth

synophotoio

synoautoblock

synopingpong

synobackup

synopkg

synobackupd

synopkgctl

synobandwidth

synopkghelper

synoblog_backup

synoplatform

synobootseq

synoportforward

synobootupcheck

synopoweroff

synobtrfssnap

synopreferencedir

synocacheclient

synoprint

synocachepinfiletool

synopsql

synocachepinfiletool-status

synoquota

synocachepinfiletoolha

synoraidtool

synocerttool

synorecycle

synocfgen

synorelayd

synocgid

synoretainer

synocgitool

synoretention-lun

synocheckhotspare

synoretentionconf

synocheckiscsitrg

synoretentiontest

synochecknetworkcfg

[synoretentiontestutil.sh](https://link.zhihu.com/?target=http%3A//synoretentiontestutil.sh)

synocheckshare

synorouterportfwd

synocheckswapconfig

synoroutertool

synocloudserviceauth

synorsyncdtool

synocmsclient

synosavetime

synocodectool

synoscgi

synoconfbkp

synoscgi

synoconfd

synoschedtask

synocontentextract

synoschedtool

synocontentextractd

synoscimprofile

synocopy

synosdutils

synocredential

synosearch

synocrond

synosearchagent

synocrtregister

synoselfcheck

synocrtunregister

synoservice

synodatacollect

synoservicecfg

synodataverifier

synoservicectl

synodate

synoservicemigrate

synodctest

synosetkeyvalue

synodd

synoshare

synoddnsinfo

synosharequota

synoddsmtool

synosharesnapshot

synodisk

synosharesnaptool

synodiskdatacollect

synosharesnaptree

synodiskfind

synosharingbackup

synodiskpathparse

synosharingchecker

synodiskport

synosharingcron

synodriveencode

synosharingurl

synodrivehook

synosmartblock

synodriveindex

[synosnapschedtask.sh](https://link.zhihu.com/?target=http%3A//synosnapschedtask.sh)

synodriveobject

synosnmpcd

synodrivesettings

synospace

synodriveversion

[synospace.sh](https://link.zhihu.com/?target=http%3A//synospace.sh)

synodrivevolume

synosshdutils

synodsdefault

synostgpool

synodsinfo

synostgsysraid

synodsmnotify

synostgvolume

synoeaupgrade

synostorage

synoethinfo

synostoragecore

synoexternal

synostoraged

synofanconfig

synosupportchannelchecker

synofileutil

synosyncdctime

synofirewall

synosyslogmail

synofirewallUpdater

synotc

synoflashcache

synotc_common

synoflvconv

synothumb

synofstool

synotifyd

synogear

synotifydutil

synogetkeyvalue

synotimecontrol

synogpoclientd

synotlstool

synogrinst

synotune

synogroup

synotunnelexec

synoguest

synoupgrade

synohacore

synoupnp

synoindex

synoups

synoindex_mgr

synoupscommon

synoindex_package.sh

synousbcam

synoindexd

synousbcopy

synoindexplugind

synousbdisk

synoindexscand

synousbmodemd

synoindexworkerd

synouser

synoiscsiep

synouserdir

synoiscsihook

synouserhome

synoiscsitool

synovolumesnapshot

synoiscsitop

synovpnc

synoiscsitop40

synovspace

synoiscsiunmap

synovspace_wrapper

synoiscsiwebapi

synow3

synoisns

synow3tool

synokerneltz

synowebapi

synolanstatus

synowifid

synoldapclient

synowin

synoldapclientd

synowireless

synologaccd

synowsdiscoveryd

synologand

synowstransferd

synologanutil

synozram

synologconfgen

20230611-深入理解ext4等linux文件系统

目前的大部分linux文件系统都默认采用ext4 文件系统

ext 监视¥

minix 文件系统

在有ext 之前,使用的是minix 文件系统,如果你不熟悉linux 历史,那么可以理解为minix 是用于ibm pc/at微型计算机的一个非常小的类unix 系统 andrew tannenbaum 为了教学的目的而开发了它,并与1978年发布了源代码 以印刷版的格式

ext 并没有长时间占据统治地位,主要是由于它原始的时间戳 每个文件仅有一个时间戳,而不是今天我们所熟悉的有inode 最近文件访问时间和最新文件修改时间的时间戳

ext2 提供了GB 级别的最大文件大小和TB 级别的文件系统大小

但这里仍然有一些问题需要解决,ext2 文件系统 与20世纪90年代的大多数文件系统一样,如果在将数据写入到磁盘的时候,系统发生崩溃或断电,则容易发生灾难性的数据损坏

ext2 还是用在某些特殊的情况下,最常见的是,作为便携式usb 驱动的文件系统格式

ext3 和20世纪90年代后期的其他文件系统,如微软的ntfs 使用日志来解决这个问题,日志是磁盘上的一种特殊的分配区域,其写入被存储在事务中,如果该事务完成磁盘写入,则日志中的数据将提交给文件系统自身,如果系统在该操作提交前崩溃,则重新启动的系统识别其为未完成的事务而将其进行回滚,就像从未发生过一样,这意味着正在处理的文件可能依然会丢失,但文件系统本身保持一致,且其他所有数据都是安全的

在使用ext3文件系统的linux 内核中实现了三个级别的日志记录方式,日志 顺序和回写

日记 是最低风险模式,在将数据和元数据提交给文件系统之前将其写入日志。这可以保证正在写入的文件与整个文件系统的一致性,但其显著降低了性能。
顺序 是大多数 Linux 发行版默认模式;顺序模式将元数据写入日志而直接将数据提交到文件系统。顾名思义,这里的操作顺序是固定的:首先,元数据提交到日志;其次,数据写入文件系统,然后才将日志中关联的元数据更新到文件系统。这确保了在发生崩溃时,那些与未完整写入相关联的元数据仍在日志中,且文件系统可以在回滚日志时清理那些不完整的写入事务。在顺序模式下,系统崩溃可能导致在崩溃期间文件的错误被主动写入,但文件系统它本身 —— 以及未被主动写入的文件 —— 确保是安全的。
回写 是第三种模式 —— 也是最不安全的日志模式。在回写模式下,像顺序模式一样,元数据会被记录到日志,但数据不会。与顺序模式不同,元数据和数据都可以以任何有利于获得最佳性能的顺序写入。这可以显著提高性能,但安全性低很多。尽管回写模式仍然保证文件系统本身的安全性,但在崩溃或崩溃之前写入的文件很容易丢失或损坏。

ext3 使用16位内部寻址,这意味着对于有着¥K 块大小的ext3在最大规格位16TiB 的文件系统重可以处理的最大文件大小位1TiB

ext4 在功能上与ext3在功能上非常相似,但支持大文件系统,提高了对碎片的抵抗力,有更高的性能以及更好的时间戳

ext4 vs ext3

ext3 和 ext4 有一些非常明确的差别,在这里集中讨论下。

向后兼容性
ext4 特地设计为尽可能地向后兼容 ext3。这不仅允许 ext3 文件系统原地升级到 ext4;也允许 ext4 驱动程序以 ext3 模式自动挂载 ext3 文件系统,因此使它无需单独维护两个代码库。

大文件系统
ext3 文件系统使用 32 位寻址,这限制它仅支持 2 TiB 文件大小和 16 TiB 文件系统系统大小(这是假设在块大小为 4 KiB 的情况下,一些 ext3 文件系统使用更小的块大小,因此对其进一步被限制)。

ext4 使用 48 位的内部寻址,理论上可以在文件系统上分配高达 16 TiB 大小的文件,其中文件系统大小最高可达 1000000 TiB(1 EiB)。在早期 ext4 的实现中有些用户空间的程序仍然将其限制为最大大小为 16 TiB 的文件系统,但截至 2011 年,e2fsprogs 已经直接支持大于 16 TiB 大小的 ext4 文件系统。例如,红帽企业 Linux 在其合同上仅支持最高 50 TiB 的 ext4 文件系统,并建议 ext4 卷不超过 100 TiB。

分配方式改进
ext4 在将存储块写入磁盘之前对存储块的分配方式进行了大量改进,这可以显著提高读写性能。

区段

区段(extent)是一系列连续的物理块 (最多达 128 MiB,假设块大小为 4 KiB),可以一次性保留和寻址。使用区段可以减少给定文件所需的 inode 数量,并显著减少碎片并提高写入大文件时的性能。

多块分配

ext3 为每一个新分配的块调用一次块分配器。当多个写入同时打开分配器时,很容易导致严重的碎片。然而,ext4 使用延迟分配,这允许它合并写入并更好地决定如何为尚未提交的写入分配块。

持久的预分配

在为文件预分配磁盘空间时,大部分文件系统必须在创建时将零写入该文件的块中。ext4 允许替代使用 fallocate(),它保证了空间的可用性(并试图为它找到连续的空间),而不需要先写入它。这显著提高了写入和将来读取流和数据库应用程序的写入数据的性能。

延迟分配

这是一个耐人寻味而有争议性的功能。延迟分配允许 ext4 等待分配将写入数据的实际块,直到它准备好将数据提交到磁盘。(相比之下,即使数据仍然在往写入缓存中写入,ext3 也会立即分配块。)

当缓存中的数据累积时,延迟分配块允许文件系统对如何分配块做出更好的选择,降低碎片(写入,以及稍后的读)并显著提升性能。然而不幸的是,它 增加 了还没有专门调用 fsync() 方法(当程序员想确保数据完全刷新到磁盘时)的程序的数据丢失的可能性。

假设一个程序完全重写了一个文件:

fd=open(“file”, O_TRUNC); write(fd, data); close(fd);
使用旧的文件系统,close(fd); 足以保证 file 中的内容刷新到磁盘。即使严格来说,写不是事务性的,但如果文件关闭后发生崩溃,则丢失数据的风险很小。

如果写入不成功(由于程序上的错误、磁盘上的错误、断电等),文件的原始版本和较新版本都可能丢失数据或损坏。如果其它进程在写入文件时访问文件,则会看到损坏的版本。如果其它进程打开文件并且不希望其内容发生更改 —— 例如,映射到多个正在运行的程序的共享库。这些进程可能会崩溃。

为了避免这些问题,一些程序员完全避免使用 O_TRUNC。相反,他们可能会写入一个新文件,关闭它,然后将其重命名为旧文件名:

fd=open(“newfile”); write(fd, data); close(fd); rename(“newfile”, “file”);
在 没有 延迟分配的文件系统下,这足以避免上面列出的潜在的损坏和崩溃问题:因为 rename() 是原子操作,所以它不会被崩溃中断;并且运行的程序将继续引用旧的文件。现在 file 的未链接版本只要有一个打开的文件文件句柄即可。但是因为 ext4 的延迟分配会导致写入被延迟和重新排序,rename(“newfile”, “file”) 可以在 newfile 的内容实际写入磁盘内容之前执行,这出现了并行进行再次获得 file 坏版本的问题。

为了缓解这种情况,Linux 内核(自版本 2.6.30)尝试检测这些常见代码情况并强制立即分配。这会减少但不能防止数据丢失的可能性 —— 并且它对新文件没有任何帮助。如果你是一位开发人员,请注意:保证数据立即写入磁盘的唯一方法是正确调用 fsync()。

无限制的子目录
ext3 仅限于 32000 个子目录;ext4 允许无限数量的子目录。从 2.6.23 内核版本开始,ext4 使用 HTree 索引来减少大量子目录的性能损失。

日志校验
ext3 没有对日志进行校验,这给处于内核直接控制之外的磁盘或自带缓存的控制器设备带来了问题。如果控制器或具自带缓存的磁盘脱离了写入顺序,则可能会破坏 ext3 的日记事务顺序,从而可能破坏在崩溃期间(或之前一段时间)写入的文件。

理论上,这个问题可以使用写入 障碍(barrier) —— 在安装文件系统时,你在挂载选项设置 barrier=1,然后设备就会忠实地执行 fsync 一直向下到底层硬件。通过实践,可以发现存储设备和控制器经常不遵守写入障碍 —— 提高性能(和跟竞争对手比较的性能基准),但增加了本应该防止数据损坏的可能性。

对日志进行校验和允许文件系统崩溃后第一次挂载时意识到其某些条目是无效或无序的。因此,这避免了回滚部分条目或无序日志条目的错误,并进一步损坏的文件系统 —— 即使部分存储设备假做或不遵守写入障碍。

快速文件系统检查
在 ext3 下,在 fsck 被调用时会检查整个文件系统 —— 包括已删除或空文件。相比之下,ext4 标记了 inode 表未分配的块和扇区,从而允许 fsck 完全跳过它们。这大大减少了在大多数文件系统上运行 fsck 的时间,它实现于内核 2.6.24。

改进的时间戳
ext3 提供粒度为一秒的时间戳。虽然足以满足大多数用途,但任务关键型应用程序经常需要更严格的时间控制。ext4 通过提供纳秒级的时间戳,使其可用于那些企业、科学以及任务关键型的应用程序。

ext3 文件系统也没有提供足够的位来存储 2038 年 1 月 18 日以后的日期。ext4 在这里增加了两个位,将 Unix 纪元扩展了 408 年。如果你在公元 2446 年读到这篇文章,你很有可能已经转移到一个更好的文件系统 —— 如果你还在测量自 1970 年 1 月 1 日 00:00(UTC)以来的时间,这会让我死后得以安眠。

在线碎片整理
ext2 和 ext3 都不直接支持在线碎片整理 —— 即在挂载时会对文件系统进行碎片整理。ext2 有一个包含的实用程序 e2defrag,它的名字暗示 —— 它需要在文件系统未挂载时脱机运行。(显然,这对于根文件系统来说非常有问题。)在 ext3 中的情况甚至更糟糕 —— 虽然 ext3 比 ext2 更不容易受到严重碎片的影响,但 ext3 文件系统运行 e2defrag 可能会导致灾难性损坏和数据丢失。

尽管 ext3 最初被认为“不受碎片影响”,但对同一文件(例如 BitTorrent)采用大规模并行写入过程的过程清楚地表明情况并非完全如此。一些用户空间的手段和解决方法,例如 Shake,以这样或那样方式解决了这个问题 —— 但它们比真正的、文件系统感知的、内核级碎片整理过程更慢并且在各方面都不太令人满意。

ext4 通过 e4defrag 解决了这个问题,且是一个在线、内核模式、文件系统感知、块和区段级别的碎片整理实用程序。

正在进行的 ext4 开发
ext4,正如 Monty Python 中瘟疫感染者曾经说过的那样,“我还没死呢!”虽然它的主要开发人员认为它只是一个真正的下一代文件系统的权宜之计,但是在一段时间内,没有任何可能的候选人准备好(由于技术或许可问题)部署为根文件系统。

在未来的 ext4 版本中仍然有一些关键功能要开发,包括元数据校验和、一流的配额支持和大分配块。

元数据校验和
由于 ext4 具有冗余超级块,因此为文件系统校验其中的元数据提供了一种方法,可以自行确定主超级块是否已损坏并需要使用备用块。可以在没有校验和的情况下,从损坏的超级块恢复 —— 但是用户首先需要意识到它已损坏,然后尝试使用备用方法手动挂载文件系统。由于在某些情况下,使用损坏的主超级块安装文件系统读写可能会造成进一步的损坏,即使是经验丰富的用户也无法避免,这也不是一个完美的解决方案!

与 Btrfs 或 ZFS 等下一代文件系统提供的极其强大的每块校验和相比,ext4 的元数据校验和的功能非常弱。但它总比没有好。虽然校验 所有的事情 都听起来很简单!—— 事实上,将校验和与文件系统连接到一起有一些重大的挑战;请参阅设计文档了解详细信息。

一流的配额支持
等等,配额?!从 ext2 出现的那天开始我们就有了这些!是的,但它们一直都是事后的添加的东西,而且它们总是犯傻。这里可能不值得详细介绍,但设计文档列出了配额将从用户空间移动到内核中的方式,并且能够更加正确和高效地执行。

大分配块
随着时间的推移,那些讨厌的存储系统不断变得越来越大。由于一些固态硬盘已经使用 8K 硬件块大小,因此 ext4 对 4K 模块的当前限制越来越受到限制。较大的存储块可以显著减少碎片并提高性能,代价是增加“松弛”空间(当你只需要块的一部分来存储文件或文件的最后一块时留下的空间)。

你可以在设计文档中查看详细说明。

ext4 的实际限制
ext4 是一个健壮、稳定的文件系统。如今大多数人都应该在用它作为根文件系统,但它无法处理所有需求。让我们简单地谈谈你不应该期待的一些事情 —— 现在或可能在未来:

虽然 ext4 可以处理高达 1 EiB 大小(相当于 1,000,000 TiB)大小的数据,但你 真的 不应该尝试这样做。除了能够记住更多块的地址之外,还存在规模上的问题。并且现在 ext4 不会处理(并且可能永远不会)超过 50-100 TiB 的数据。

ext4 也不足以保证数据的完整性。随着日志记录的重大进展又回到了 ext3 的那个时候,它并未涵盖数据损坏的许多常见原因。如果数据已经在磁盘上被破坏 —— 由于故障硬件,宇宙射线的影响(是的,真的),或者只是数据随时间衰减 —— ext4 无法检测或修复这种损坏。

基于上面两点,ext4 只是一个纯 文件系统,而不是存储卷管理器。这意味着,即使你有多个磁盘 —— 也就是奇偶校验或冗余,理论上你可以从 ext4 中恢复损坏的数据,但无法知道使用它是否对你有利。虽然理论上可以在不同的层中分离文件系统和存储卷管理系统而不会丢失自动损坏检测和修复功能,但这不是当前存储系统的设计方式,并且它将给新设计带来重大挑战。

备用文件系统
在我们开始之前,提醒一句:要非常小心,没有任何备用的文件系统作为主线内核的一部分而内置和直接支持!

即使一个文件系统是 安全的,如果在内核升级期间出现问题,使用它作为根文件系统也是非常可怕的。如果你没有充分的理由通过一个 chroot 去使用替代介质引导,耐心地操作内核模块、grub 配置和 DKMS……不要在一个很重要的系统中去掉预留的根文件。

可能有充分的理由使用你的发行版不直接支持的文件系统 —— 但如果你这样做,我强烈建议你在系统启动并可用后再安装它。(例如,你可能有一个 ext4 根文件系统,但是将大部分数据存储在 ZFS 或 Btrfs 池中。)

XFS
XFS 与非 ext 文件系统在 Linux 中的主线中的地位一样。它是一个 64 位的日志文件系统,自 2001 年以来内置于 Linux 内核中,为大型文件系统和高度并发性提供了高性能(即大量的进程都会立即写入文件系统)。

从 RHEL 7 开始,XFS 成为 Red Hat Enterprise Linux 的默认文件系统。对于家庭或小型企业用户来说,它仍然有一些缺点 —— 最值得注意的是,重新调整现有 XFS 文件系统是一件非常痛苦的事情,不如创建另一个并复制数据更有意义。

虽然 XFS 是稳定的且是高性能的,但它和 ext4 之间没有足够具体的最终用途差异,以值得推荐在非默认(如 RHEL7)的任何地方使用它,除非它解决了对 ext4 的特定问题,例如大于 50 TiB 容量的文件系统。

XFS 在任何方面都不是 ZFS、Btrfs 甚至 WAFL(一个专有的 SAN 文件系统)的“下一代”文件系统。就像 ext4 一样,它应该被视为一种更好的方式的权宜之计。

ZFS
ZFS 由 Sun Microsystems 开发,以 zettabyte 命名 —— 相当于 1 万亿 GB —— 因为它理论上可以解决大型存储系统。

作为真正的下一代文件系统,ZFS 提供卷管理(能够在单个文件系统中处理多个单独的存储设备),块级加密校验和(允许以极高的准确率检测数据损坏),自动损坏修复(其中冗余或奇偶校验存储可用),快速异步增量复制,内联压缩等,以及更多。

从 Linux 用户的角度来看,ZFS 的最大问题是许可证问题。ZFS 许可证是 CDDL 许可证,这是一种与 GPL 冲突的半许可的许可证。关于在 Linux 内核中使用 ZFS 的意义存在很多争议,其争议范围从“它是 GPL 违规”到“它是 CDDL 违规”到“它完全没问题,它还没有在法庭上进行过测试。”最值得注意的是,自 2016 年以来 Canonical 已将 ZFS 代码内联在其默认内核中,而且目前尚无法律挑战。

此时,即使我作为一个非常狂热于 ZFS 的用户,我也不建议将 ZFS 作为 Linux 的根文件系统。如果你想在 Linux 上利用 ZFS 的优势,用 ext4 设置一个小的根文件系统,然后将 ZFS 用在你剩余的存储上,把数据、应用程序以及你喜欢的东西放在它上面 —— 但把 root 分区保留在 ext4 上,直到你的发行版明确支持 ZFS 根目录。

Btrfs
Btrfs 是 B-Tree Filesystem 的简称,通常发音为 “butter” —— 由 Chris Mason 于 2007 年在 Oracle 任职期间发布。Btrfs 旨在跟 ZFS 有大部分相同的目标,提供多种设备管理、每块校验、异步复制、直列压缩等,还有更多。

截至 2018 年,Btrfs 相当稳定,可用作标准的单磁盘文件系统,但可能不应该依赖于卷管理器。与许多常见用例中的 ext4、XFS 或 ZFS 相比,它存在严重的性能问题,其下一代功能 —— 复制、多磁盘拓扑和快照管理 —— 可能非常多,其结果可能是从灾难性地性能降低到实际数据的丢失。

Btrfs 的维持状态是有争议的;SUSE Enterprise Linux 在 2015 年采用它作为默认文件系统,而 Red Hat 于 2017 年宣布它从 RHEL 7.4 开始不再支持 Btrfs。可能值得注意的是,该产品支持 Btrfs 部署用作单磁盘文件系统,而不是像 ZFS 中的多磁盘卷管理器,甚至 Synology 在它的存储设备使用 Btrfs,但是它在传统 Linux 内核 RAID(mdraid)之上分层来管理磁盘。

20230609-LED雷达感应灯管原理是怎样的

LED雷达感应灯.该产品利用多普勒效应原理, 通过平面天线发射电磁波,当有移动物体进入到电磁波的环境时,波形反射折回,平面天线接收到反馈的波形时,后续电路经检测触发信号工作。

从而产生亮/微亮的双亮度效果,综合加权功率只有5-6W,比普通荧光灯节能效果达到85%以上.寿命大幅度延长.和人体热释电感应和声控感应相比, 感应距离更远,角度更广,无死区,能穿透玻璃和薄木板,不受环境、温度、灰尘等影响,在37度情况下,感应距离不会缩短。反映速度快,隐蔽性好,雷达感应LED灯是地下车库最好的照明灯具。

人体感应和雷达感应的区别

雷达感应和人体红外感应技术皆常用于自动门、感应照明灯等自动控制场合,但这两种感应控制技术的工作原理不一样,使用时还是有一些区别的,今天玖越小编就大龄大家了解一下二者的区别与工作原理。

雷达感应:采用多普勒雷达感应原理,通过发射5.8GHz的雷达信号,一旦有移动物体进入感应范围,则会改变雷达信号波形,从而触发雷达感应器动作;不受环境温度及声音响度影响,是最选进最人性化的感应技术;

人体感应:采用热释电红外感应原理,通过收集红外能量变化触发感应器动作,受环境温度影响,当夏天环境温度接近人体体温时,人进入感应范围无红外能量变化,所以夏天人体感应表现非常不灵敏。
1、雷达感应的工作原理
上图所示的模块是一款雷达感应模块,其由微波振荡器、放大整形及检测电路构成。工作时,微波振荡器通过印制在PCB板上的天线向外发射超高频(GHz级)电磁波,根据微波多普勒原理。

若雷达模块周围有移动的物体,其天线便会接收到移动物体反射回来的电磁波,而这个反射回来的电磁波的频率与模块向外发射的电磁波的频率有一定的频率差,这个频率差被接收电路放大、整形等处理后,即可输出一个控制信号去控制负载的工作。

2、人体感应的工作原理

上图为一个人体感应模块。其由菲涅尔透镜、热释电传感器及感应信号处理电路构成。由于这种模块用的热释电传感器前面加有红外滤光片,故其只能检测人体发出的波长为十几μm的红外信号,模块配的菲涅尔透镜用以提高灵敏度。

这种模块工作时,只要热释电传感器监测区域内有人走动,传感器便会输出相应的电信号,该信号经感应信号处理电路处理后输出一个控制信号去控制负载的工作。

上述两种感应模块皆可用于感应灯、自动门的控制。使用微波感应模块控制的优点是无方向性,只要有人或其它物体在模块的监测区域内移动,即可实现控制,其缺点是模块的耗电较大(工作电流在mA级),并且这种雷达感应模块价格要比热释电人体感应模块贵好几倍。

​人体感应模块的优点是价格低廉、待机耗电小(一些电路设计合理的模块,静态耗电可低至100μA以内),可以使用电池供电,缺点是使用有方向性,只有在传感器的前方有人移动,才能实现控制。

20230605-linux系统目录结构

登录系统后,在当前命令窗口下输入命令

1
ls /

树状目录结构

以下是对这些目录的解释

bin
是binaries 二进制文件的缩写,这个目录存放着最经常使用的命令

boot 这里存放的是启动linux 时使用的一些核心文件,包括一些连接文件以及镜像文件

dev 是device 设备的缩写,该目录下存放的是linux 的外部设备,在linux 中访问设备的方式和访问文件的方式是相同的

etc 是etcetera 等等的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录

home 用户的主目录,在linux中,每个用户都有一个子集的目录,一般该目录是以用户的账号命名的,如上图中的alice bob eve

lib

是library 库的缩写,这个目录里存放着系统最基本的动态连接共享库,其作用是类似于windows 里的dll 文件,几乎所有的应用程序都需要用到这些共享库

lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就准方了一些文件

media linux 会自动识别一些设备,例如 u 盘,光驱等等,当识别后,linux 会把设备挂载到这个目录下

mnt 系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将光驱挂载在 mnt 上,然后进入该目录就可以查看光驱里的内容了

opt 是optional 的缩写,这是给主机额外安装软件搜摆放的目录,比如你安装一个oracle 数据库则就可以放到这个目录下,默认是空的

proc
proc 是processes 进程的缩写,proc 是一种伪文件 系统,也即虚拟文件系统,存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息

这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping 命令,使别人无法ping 你的机器

1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

root 该目录为系统管理员,也称作超级权限者的用户主目录

sbin s 就是super user 的意思,是superuser binaries 超级用户的二进制文件的缩写,这里存放的是系统管理员使用的系统管理程序

selinux 这个目录是centos 所特有的目录 selinux 是一个安全机制,类似于windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux 相关的文件的

srv 该目录存放一些服务启动之后需要提取的数据

sys 这是linux 2.6 内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统 sysfs

sysfs 文件系统集成了下面3种文件系统的信息

针对进程信息的proc 文件系统,针对设备的devfs 文件系统以及针对伪终端的devpts 文件系统

该文件系统是内核设备树的一个直观反映

当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统重被创建

tmp 是temporary 的缩写 这个目录是用来存放一些临时文件

usr 是unix shared resources 共享资源的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows 下的program files 目录

usr/bin
系统用户使用的应用程序

usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序

usr/src 内核源代码默认的放置目录

var 是variable 变量的缩写,这个目录中存放着在不断扩展着的东西,我们习惯将那些经常被修改的目录放在这个目录下,包括各种日志文件

run 是一个临时文件系统,存储系统启动以来的信息,当系统重启时,这个目录下的文件应该被删掉或清除,如果你的系统上诱var/run 目录,应该让它指向 run

在linux 系统中,诱几个目录是比较重要的,平时需要注意不要误删或者随意更改内部文件

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是 /bin、/usr/bin 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

20230605-roff排版系统的概念和历史

roff 是一系列排版程序,如troff nroff fitroff groff 等等的通称,一个roff 排版系统包含一个可扩展的文本格式化语言和一系列程序用以打印和转换为其他文本格式,传统的,它是unix 的主要文本处理系统,现在,每个类unix 操作系统仍然附带一个roff 系统作为核心软件包

roff 在文本设备上的输出效果仍然是无可比拟的,并且,与其他自由的排版系统相比,它的图形输出也不差, 甚至强于很多商业的系统

unix 的一个著名的来源,出现于1963,同时runoff 成为文档和文本处理的主要格式。

multics

这种语言的模型是根据 前计算机时代的排版习惯而建立的,那时,以点 dot 开头的行被写在手稿中,向之后进行手工排版工作得工人指示格式化的要求

所有现代的roff 系统都试图实现同这个系统兼容

最早的roff 系统有三个排版程序

troff 为它唯一支持的cat 排字机产生一个图形的输出

nroff 为终端和文本打印机产生合适的文本输出

roff 对最初的runoff 程序的有限功能进行重新实现,这个程序在后来的版本中被抛弃,现在,roff 这个名字只用来替代一个troff nroff 系统的整体

在一些系统上,这个设备无关的troff 有一个可执行文件叫做 ditroff ,所有现代的troff 程序都已经自动提供了对distroff 完整的兼容性

古老的unix 和传统的troff 的源代码在长达20年时间里不再可以自由获得

grodd 系统仍然在继续开发,它与传统 troff 兼容,但是还添加了很多扩展,它是第一个可以在几乎所有操作系统上运行的,roff 系统并且 它是自由开放的,这使得groff 成为现在 roff 的事实标准

使用 using roff

预处理器产生roff 代码,传给一个roff 处理器,例如,troff,然后roff 处理器接下来产生中间输出,传给一个后处理器程序,用来打印或者产生最终输出

预处理器 preprocessors

一些不能在所有系统上使用,还有一些预处理器被认为是roff 系统不可分割的部分,传统的预处理器有

tbl 制表

eqn 数学公式

pic 绘图

refer 书目索引

soelim 包含标准位置的宏文件

其他已知预处理器,但不是在所有系统上都可用

chem 化学公式

grap 构造图元

grn 插入 gremlin 图片

设备 后处理器

设备是类似打印机、字符或图形终端等的硬件接口,或者是用于转换为另一种字符或图形设备的软件接口

现在,操作系统为大多数类似打印机的硬件提供了设备驱动,因此不必为每个打印机写一个特殊的后处理器

roff 编程

roff 文档是加入了roff 排版元素的普通文档,roff 排版语言非常强大,它几乎是一个完整的程序语言,并且提供了扩充自身的元素,使用这些元素,就可以开发为特殊程序定制的宏包

宏包

一个包的宏定义保存在一个叫做 name.tmac 的文件中

文档中用到的宏包可以使用命令行选项 -m 提供给排版程序,参见 troff 它们也可以在文档中指定,使用roff 语言的包含文件命令,参见 groof

roff 语言是完整的编程语言,提供了命令,宏定义,转义序列,字符串变量,数字或数量寄存器,还有流程控制语句

文件扩展名

文件扩展名与 less 格式化工具结合,会非常好用,它提供了用单一的方式打开各种输入的可能性,方法是定义一个shell 环境变量lessopen,这种方法没有什么文档,这是一个例子

1
sh# LESSOPEN='|lesspipe %s'

lesspipe 可以是一个系统提供的命令或者是你自己的脚本

  • Copyrights © 2015-2024 TeX_baitu
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~