<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux &#8211; 张三太爷</title>
	<atom:link href="https://www.somedoc.net/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.somedoc.net</link>
	<description>看前面，黑洞洞</description>
	<lastBuildDate>Sat, 27 Sep 2025 14:37:25 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://www.somedoc.net/wp-content/uploads/2016/12/cropped-dandycheung-1-32x32.jpg</url>
	<title>Linux &#8211; 张三太爷</title>
	<link>https://www.somedoc.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>与 XFS 文件系统的初次交手</title>
		<link>https://www.somedoc.net/2025/09/27/%e4%b8%8e-xfs-%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%88%9d%e6%ac%a1%e4%ba%a4%e6%89%8b/</link>
					<comments>https://www.somedoc.net/2025/09/27/%e4%b8%8e-xfs-%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%88%9d%e6%ac%a1%e4%ba%a4%e6%89%8b/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Sat, 27 Sep 2025 14:37:24 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[问题解决]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=6519</guid>

					<description><![CDATA[背景 有一块 256GB 的硬盘，其上为 CentOS 操作 <a href="https://www.somedoc.net/2025/09/27/%e4%b8%8e-xfs-%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%88%9d%e6%ac%a1%e4%ba%a4%e6%89%8b/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<h2>背景</h2>
<p>有一块 256GB 的硬盘，其上为 CentOS 操作系统以及数据，想全盘克隆至另一块 250GB 的硬盘上，由于目标盘容量不够，因此需要想办法。</p>
<p>在 Windows 下使用 DiskGenius 6.0 和 Acronic True Image 2017 执行克隆硬盘的任务都失败。联想到各自在界面中对分区状态的展示，推测失败原因似乎都与 XFS 文件系统相关。</p>
<p>在网络上搜索，遭到了 https://www.cnblogs.com/Jas0n0ss/p/16142457.html 这个实践，因此决定以它为主要参考教程，来实施缩小 XFS 分区的任务。</p>
<h2>过程</h2>
<p>到 Ubuntu 下，<code>apt install xpsdump</code> 后，参照前述教程亦步亦趋。</p>
<p>把源盘使用 USB 易驱线连接到电脑上，先看概况：</p><pre class="crayon-plain-tag">dandy@dandy-t450s-ubuntu:~$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 2.0G 2.5M 2.0G 1% /run
/dev/sdc2 ext4 228G 118G 100G 55% /
tmpfs tmpfs 9.8G 0 9.8G 0% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 9.8G 216K 9.8G 1% /run/qemu
/dev/sdc1 vfat 511M 15M 497M 3% /boot/efi
tmpfs tmpfs 2.0G 1.7M 2.0G 1% /run/user/1000
/dev/sdd5 xfs 226G 88G 139G 39% /media/dandy/2c130885-88e9-4779-bc9b-52cac8b15605</pre><p>其中的 sdd5 即是欲调整的分区。接下来先备份整个分区的所有文件，</p><pre class="crayon-plain-tag">dandy@dandy-t450s-ubuntu:~$ sudo xfsdump -f ~/centos.xfsdump /media/dandy/2c130885-88e9-4779-bc9b-52cac8b15605
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.9 (dump format 3.0) - type ^C for status and control

============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
-&gt; dump-centos
session label entered: "dump-centos"

--------------------------------- end dialog ---------------------------------

xfsdump: level 0 dump of dandy-t450s-ubuntu:/media/dandy/2c130885-88e9-4779-bc9b-52cac8b15605
xfsdump: dump date: Fri Sep 26 21:23:57 2025
xfsdump: session id: dd3e04bc-50ed-42e1-80f0-4dfd31fa64b7
xfsdump: session label: "dump-centos"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 93745352000 bytes
xfsdump: /var/lib/xfsdump/inventory created

============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
-&gt; centos
media label entered: "centos"

--------------------------------- end dialog ---------------------------------

xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 93274618464 bytes
xfsdump: dump size (non-dir files) : 93110991456 bytes
xfsdump: dump complete: 1271 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /home/dandy/centos.xfsdump OK (success)
xfsdump: Dump Status: SUCCESS</pre><p>查看备份，并确认源分区无人使用后卸下，</p><pre class="crayon-plain-tag">dandy@dandy-t450s-ubuntu:~$ ll -h ~/centos.xfsdump
-rw-r--r-- 1 root root 87G 9月 26 21:44 /home/dandy/centos.xfsdump
dandy@dandy-t450s-ubuntu:~$ fuser -km /media/dandy/2c130885-88e9-4779-bc9b-52cac8b15605
dandy@dandy-t450s-ubuntu:~$ umount /media/dandy/2c130885-88e9-4779-bc9b-52cac8b15605</pre><p>接下来则与教程不同，因为源盘未启用逻辑卷管理。尝试使用 Disks 工具直接缩小 XFS 文件系统不可行，毕竟该文件系统原则上只能扩大。</p>
<p>那只好自行尝试现将 XFS 文件系统清除，再新创建一个小一点的。打开 GParted 工具，将 XFS 分区上的文件系统标记为 cleared，再用 Disks 把该分区的大小减小了 3GB。这样操作（即非要调整分区大小而非在扩展分区里将该子分区删除后再创建）是想看看能不能保住 UUID，结论是不行。</p>
<p>现在要重新创建 XFS 文件系统了，</p><pre class="crayon-plain-tag">dandy@dandy-t450s-ubuntu:~$ sudo mkfs.xfs /dev/sdd5 -f
Swipe your right index finger across the fingerprint reader
meta-data=/dev/sdd5 isize=512 agcount=4, agsize=14648448 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=58593792, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=28610, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0</pre><p>在 Disks 里能看到 UUID 变了，想把它改回去（之前熟悉的 tune2fs -U {uuid} /dev/XXX 不行，因为那是用于 ext 文件系统的），</p><pre class="crayon-plain-tag">dandy@dandy-t450s-ubuntu:~$ sudo tune2fs -U 2c130885-88e9-4779-bc9b-52cac8b15605 /dev/sdd5
tune2fs 1.46.5 (30-Dec-2021)
tune2fs: Bad magic number in super-block while trying to open /dev/sdd5
/dev/sdd5 contains a xfs file system
dandy@dandy-t450s-ubuntu:~$ sudo xfs_admin -U 2c130885-88e9-4779-bc9b-52cac8b15605 /dev/sdd5
Clearing log and setting UUID
writing all SBs
new UUID = 2c130885-88e9-4779-bc9b-52cac8b15605</pre><p>到 Disks 里一看，已经生效，直接把它 mount 上，现在就该恢复备份的文件了，</p><pre class="crayon-plain-tag">dandy@dandy-t450s-ubuntu:~$ sudo xfsrestore -f ~/centos.xfsdump /media/dandy/2c130885-88e9-4779-bc9b-52cac8b15605
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.9 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: dandy-t450s-ubuntu
xfsrestore: mount point: /media/dandy/2c130885-88e9-4779-bc9b-52cac8b15605
xfsrestore: volume: /dev/sdd5
xfsrestore: session time: Fri Sep 26 21:23:57 2025
xfsrestore: level: 0
xfsrestore: session label: "dump-centos"
xfsrestore: media label: "centos"
xfsrestore: file system id: 2c130885-88e9-4779-bc9b-52cac8b15605
xfsrestore: session id: dd3e04bc-50ed-42e1-80f0-4dfd31fa64b7
xfsrestore: media id: cac5291e-94f5-4f9f-ba4c-6d6b7a07d9ad
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 180135 directories and 447251 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 389 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore: stream 0 /home/dandy/centos.xfsdump OK (success)
xfsrestore: Restore Status: SUCCESS</pre><p>查看一下，</p><pre class="crayon-plain-tag">dandy@dandy-t450s-ubuntu:~$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 2.0G 2.5M 2.0G 1% /run
/dev/sdc2 ext4 228G 204G 13G 95% /
tmpfs tmpfs 9.8G 0 9.8G 0% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 9.8G 216K 9.8G 1% /run/qemu
/dev/sdc1 vfat 511M 15M 497M 3% /boot/efi
tmpfs tmpfs 2.0G 1.7M 2.0G 1% /run/user/1000
/dev/sdd5 xfs 224G 89G 135G 40% /media/dandy/2c130885-88e9-4779-bc9b-52cac8b15605</pre><p>看上去是成了。到 Disks 里，把 XFS 文件系统所处的扩展分区缩到了最小。这样，整个源盘上的所有分区就都处于目标盘的容量范围内了。</p>
<p>用 USB 易驱线把目标盘也接上，dd 两个磁盘顺利完成。</p>
<p>转过天来检查成果。把源盘插回原来的电脑上启动 CentOS，可以正常登录进入系统，但是却出现了一个提示：XFS (sda1): Superblock has unknown read-only compatible features (0x4) enabled. 一检查，果然，整个 / 根分区是以只读方式 mount 起来的。还换用克隆出的目标盘也启动了一把，问题一毛一样。这样可以放下一样心：至少不是克隆的问题。瞬间感觉到昨天还是小看了 XFS，竟然不知道在哪里偷偷摸摸就给藏了雷。</p>
<p>又经过一番资料检索，大致有了个约摸：大概率是 Ubuntu 下操作 XFS 的工具链包括驱动等，版本与 CentOS 自带的有出入，所以制作的文件系统存在兼容性上的问题。0x4 似乎是对应于一个叫做 Reflink 的特性，而且这个特性相当特：它在文件系统创建时一旦指定，之后的存续期间就无法修改。</p>
<p>昨天操作这两块盘的 Ubuntu 不在手边，这两块盘虽然都能正常启动，却都是只读的 / 分区。如何是好？一开始想到 /tmp 目录通常是 tmpfs，应该可以供 mount point 存身，但在其中 mkdir 时失败了。AI 提示了一句，说可以试试 /run 目录，一试还真行。于是开启了源盘和目标盘两兄弟穷帮穷的互助之旅。</p>
<p>要做的事是一样的，只不过你帮我做一遍，反过来我再帮你做一遍。这些事情有：</p>
<ol>
<li>本盘正常启动 CentOS，登录进入；</li>
<li>把另一块盘接到电脑上，对其上的 / 分区强行重建 XFS 文件系统（其实也就是格式化）：<code>mkfs.xfs -f /dev/sdb5</code>；这两块盘是孪生兄弟，因此 XFS 相关物料和工具之间不会存在版本差异；</li>
<li><code>mount /dev/sdb5 /run/destroot</code>（这个 mount point 的目录名字随意，提前建好）；</li>
<li>把本盘 / 下的所有内容复制过去（跳过系统仅运行时使用到的目录）：<code>rsync -a --exclude=/dev --exclude=/media --exclude=/mnt --exclude=/proc --exclude=/run --exclude=/sys --exclude=/tmp --progress -v / /run/destroot</code>；</li>
<li>到 /run/destroot 下，手动创建上一步特意略过的几个目录：<code>mkdir dev media mnt proc run sys tmp</code>；并设置正确的访问权限：<code>chmod 555 proc sys</code>，以及 <code>chmod 777 tmp</code>；如果缺少这几个目录，系统会无法成功引导（别问是如何得知的）；</li>
<li><code>umount /run/destroot</code>；</li>
<li>这里有个问题，这两块盘是 dd 克隆出来的，各个分区的 UUID 都一样，而上面的步骤 2 重新创建文件系统时，UUID 会发生改变。两种办法，要么去把 fstab 中的 UUID 改成新的，要么像我一样，为了维持面上的 dd 原貌，恢复旧有的 UUID（可以用 blkid 查看引导盘的根分区得到），然后使用 <code>xfs_admin -U ${uuid} /dev/sdb5</code> 这样的命令恢复；</li>
</ol>
<p>两遍处理过后，源盘和备份盘均恢复正常，至此功成。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2025/09/27/%e4%b8%8e-xfs-%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%88%9d%e6%ac%a1%e4%ba%a4%e6%89%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>使用微软重生版 edit 程序的艰难探索</title>
		<link>https://www.somedoc.net/2025/08/11/%e4%bd%bf%e7%94%a8%e5%be%ae%e8%bd%af%e9%87%8d%e7%94%9f%e7%89%88-edit-%e7%a8%8b%e5%ba%8f%e7%9a%84%e8%89%b0%e9%9a%be%e6%8e%a2%e7%b4%a2/</link>
					<comments>https://www.somedoc.net/2025/08/11/%e4%bd%bf%e7%94%a8%e5%be%ae%e8%bd%af%e9%87%8d%e7%94%9f%e7%89%88-edit-%e7%a8%8b%e5%ba%8f%e7%9a%84%e8%89%b0%e9%9a%be%e6%8e%a2%e7%b4%a2/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Mon, 11 Aug 2025 12:44:38 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[问题解决]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=6439</guid>

					<description><![CDATA[edit 原本是微软在 MS-DOS 中附带的一个便捷工具， <a href="https://www.somedoc.net/2025/08/11/%e4%bd%bf%e7%94%a8%e5%be%ae%e8%bd%af%e9%87%8d%e7%94%9f%e7%89%88-edit-%e7%a8%8b%e5%ba%8f%e7%9a%84%e8%89%b0%e9%9a%be%e6%8e%a2%e7%b4%a2/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[
<p>edit 原本是微软在 MS-DOS 中附带的一个便捷工具，用于让用户随手查看或者编辑文本文件用的，地位约等于 Windows 里的记事本。近来命令行下各种工具有卷土重来的势头，微软也在 Rust 语言的助攻下把本已凉透的 edit 复活了。</p>



<p>下午打开 WSL 里的 Ubuntu 18.04 LTS，要编辑一个 Python 源文件时突然就想试一下这个重生版的工具，于是到<a href="https://github.com/microsoft/edit/releases">官方分发页面</a>下载了下来，准备享受一番。解压缩就来了一次暴击，压缩包是个不常见的 zst 格式，原以为 tar 可以直接解决，但试过发现不行。只好先 <code>apt install zstd</code>，成功后用 zstd 解压。把得到的单文件 edit 移动到 /usr/bin 里执行，报错。</p>



<pre class="crayon-plain-tag">[crayon-68db143e506ae267148845 inline="true" ]./edit: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by ./edit)
./edit: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./edit)
./edit: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./edit)
./edit: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./edit)</pre>[/crayon]



<p>看了下系统内的 libc.so 的情况，版本是 2.27，正好差着一点。给系统升级这个重量级的 so 不是没有可能，但是风险较高，实在犯不上。正好前两天清理系统盘的时候，把 WSL 里那份不用的 Ubuntu 20.04 LTS 卸载掉了，不行就把当前的这份升级到 20.04 吧。</p>



<p>执行 <code>do-release-upgrade</code>，报错，信息的最后一句很明确：<code>ModuleNotFoundError: No module named 'apt_pkg'</code>。听了 AI 的劝，执行了 <code>apt install --reinstall python3-apt python3 python3-minimal</code> 和<br><code>apt install -f</code> 之后就好了。所谓的好了，就是 do-release-upgrade 命令可以执行了，而不是执行完成了，继续报错：</p>



<pre class="crayon-plain-tag">[crayon-68db143e506b2268143855 inline="true" ]Reading cache
pcilib: Cannot open /proc/bus/pci
lspci: Cannot find any working access method.

Checking package manager
Reading package lists... Done
Building dependency tree
Reading state information... Done
Hit http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit http://archive.ubuntu.com/ubuntu bionic InRelease
Hit http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Fetched 0 B in 0s (0 B/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done

Restoring original system state

Aborting
Reading package lists... Done
Building dependency tree
Reading state information... Done
=== Command detached from window (Mon Aug 11 18:33:29 2025) ===
=== Command terminated with exit status 1 (Mon Aug 11 18:33:39 2025) ===</pre>[/crayon]



<p>AI 又说了，你要打开 <code>/etc/update-manager/release-upgrades</code> 文件，找到 <code>Prompt=lts</code>，在它前面添加以下两行：</p>



<pre class="crayon-plain-tag">[crayon-68db143e506b5350026375 inline="true" ]CheckPCI=no
CheckUSB=no</pre>[/crayon]



<p>然后执行 <code>do-release-upgrade -f DistUpgradeViewNonInteractive</code>，再次失败。</p>



<p>无奈之下，先把 <code>/etc/apt/sources.list</code> 做了个备份，将其中的 <code>bionic</code> 全部替换成了 <code>focal</code>（<code>sed -i 's/bionic/focal/g' /etc/apt/sources.list</code>），然后执行了 <code>apt update</code> 和 <code>apy full-upgrade -y</code>。完成后重新打开 这份 WSL 实例，果然升级成功，libc.so 的版本升到了 2.31。于是满心期待地执行了 edit，呜呼呀，怎么界面看起来像是 VI？连退出的命令都没错，显然又有乌龙发生，应该是升级后的系统把 <code>/usr/bin/edit</code> 给覆盖了，八成成了 vim 的符号链接。</p>



<p>于是又把 edit 解压一次，这次执行就没问题了吧？嘿，报错：</p>



<pre class="crayon-plain-tag">[crayon-68db143e506b8648765403 inline="true" ]./edit: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./edit)
./edit: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./edit)
./edit: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./edit)</pre>[/crayon]



<p>除了把一行 2.28 的 glibc 找不到的信息消失了以外，涛声依旧。感情就是消遣俺来着。老夫还是先缓缓吧。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2025/08/11/%e4%bd%bf%e7%94%a8%e5%be%ae%e8%bd%af%e9%87%8d%e7%94%9f%e7%89%88-edit-%e7%a8%8b%e5%ba%8f%e7%9a%84%e8%89%b0%e9%9a%be%e6%8e%a2%e7%b4%a2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>让 Grub 把 Windows 系统设为默认</title>
		<link>https://www.somedoc.net/2025/02/14/%e8%ae%a9-grub-%e6%8a%8a-windows-%e7%b3%bb%e7%bb%9f%e8%ae%be%e4%b8%ba%e9%bb%98%e8%ae%a4/</link>
					<comments>https://www.somedoc.net/2025/02/14/%e8%ae%a9-grub-%e6%8a%8a-windows-%e7%b3%bb%e7%bb%9f%e8%ae%be%e4%b8%ba%e9%bb%98%e8%ae%a4/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Fri, 14 Feb 2025 08:04:19 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[问题解决]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=6328</guid>

					<description><![CDATA[这个问题也是属于延宕了许久，实在烦不胜烦了，才决定要一劳永逸 <a href="https://www.somedoc.net/2025/02/14/%e8%ae%a9-grub-%e6%8a%8a-windows-%e7%b3%bb%e7%bb%9f%e8%ae%be%e4%b8%ba%e9%bb%98%e8%ae%a4/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>这个问题也是属于延宕了许久，实在烦不胜烦了，才决定要一劳永逸解决的，之前一直是手动修改 <code>/boot/grub/grub.cfg</code>，但比较烦人的地方在于，不管是 Grub 自己升级，还是有涉及到内核的其它升级，都会在完成后自动执行 <code>update-grub</code> 从而使得手动修改的部分被清空。而如果放任不改的话，Windows 又跳出来作乱，自动更新后重启系统，就会直接从 Grub 进入到 Ubuntu。</p>
<p>问了问 DeepSeek，给出的例子老是出问题，三五个回合以后，它又回到起初的回答上了。最后还是自己修修改改搞定了。</p>
<p>到 <code>/etc/grub.d/</code> 目录下，创建一个新的 Grub 钩子脚本，三太爷的命名为 <code>31_set_default_os</code>，内容如下：</p><pre class="crayon-plain-tag">#!/bin/sh

set_windows_as_default() {
    local windows_entry

    windows_entry=$(grep -i 'windows' /boot/grub/grub.cfg | grep -oP 'menuentry \K[\x27\x32].*?[\x27\x32]' | tr -d "'\"")
    if [ -n "$windows_entry" ]; then
cat &lt;&lt; EOF
set default="$windows_entry"
EOF
        echo "Windows is set as default OS." &gt;&amp;2
        # echo "Windows found." &gt;&amp;2
    else
        echo "Windows not found." &gt;&amp;2
    fi
}

set_windows_as_default</pre><p><code>\x27</code> 和 <code>\x32</code> 分别是单双引号字符，写成转义的形式是为了不影响命令行的识别和传递。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2025/02/14/%e8%ae%a9-grub-%e6%8a%8a-windows-%e7%b3%bb%e7%bb%9f%e8%ae%be%e4%b8%ba%e9%bb%98%e8%ae%a4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Linux 下如何使硬盘离线（脱机）</title>
		<link>https://www.somedoc.net/2024/04/25/linux-%e4%b8%8b%e5%a6%82%e4%bd%95%e4%bd%bf%e7%a1%ac%e7%9b%98%e7%a6%bb%e7%ba%bf%ef%bc%88%e8%84%b1%e6%9c%ba%ef%bc%89/</link>
					<comments>https://www.somedoc.net/2024/04/25/linux-%e4%b8%8b%e5%a6%82%e4%bd%95%e4%bd%bf%e7%a1%ac%e7%9b%98%e7%a6%bb%e7%ba%bf%ef%bc%88%e8%84%b1%e6%9c%ba%ef%bc%89/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Thu, 25 Apr 2024 07:55:16 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[问题解决]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=5979</guid>

					<description><![CDATA[在 Windows 的磁盘管理器里，在列出的一块硬盘上右键， <a href="https://www.somedoc.net/2024/04/25/linux-%e4%b8%8b%e5%a6%82%e4%bd%95%e4%bd%bf%e7%a1%ac%e7%9b%98%e7%a6%bb%e7%ba%bf%ef%bc%88%e8%84%b1%e6%9c%ba%ef%bc%89/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>在 Windows 的磁盘管理器里，在列出的一块硬盘上右键，可以找到一个菜单项，使得所选硬盘离线（刚刚看了一眼，中文写的是“脱机”）。这个操作的后果就是，让这块盘在整个系统中消失，但又不同于物理层面的拔掉连接线，因为还可以再把它“联机”回来。在 Linux 有没有类似的功能呢？查了一下资料，找到<a href="https://gist.github.com/tommybutler/6953563">多年前就有人写就的一段脚本</a>。</p><pre class="crayon-plain-tag">#!/bin/bash
 
# AUTHOR: Tommy Butler
#
# DESCRIPTION:
# Run this script to offline and delete a disk from your Linux system.  
# It should work for most people, but if you've got an old kernel it may not.
# Unless you know what you're doing, DO NOT USE THIS SCRIPT!
#
# LICENSE: Perl Artistic License - http://dev.perl.org/licenses/artistic.html
#
# DISCLAIMER AND LIMITATION OF WARRANTY:
# This software is distributed in the hope that it will be useful, but without 
# any warranty; without even the implied warranty of merchantability or fitness 
# for a particular purpose.  USE AT YOUR OWN RISK.  I ASSUME NO LIABILITY.
 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 
DISK=$1;
 
if [[ `id -u` -ne 0 ]];
then
   echo Run this script with root or sudo
   exit 1
fi
 
while true;
do
   [[ "$DISK" != "" ]] &amp;&amp; break;
   read -p 'Enter the name of the disk you want to offline and delete: ' DISK
done
 
if [[ "$( expr substr $DISK 1 4 )" == '/dev' ]];
then
   DISK=$( expr substr $DISK 6 10 )
fi
 
if [[ ! -e /sys/block/$DISK ]];
then
   echo No entry for /dev/$DISK was not found in /sys/block/ - Cannot continue
   exit 1
fi
 
echo Are you sure you want to offline and delete /dev/${DISK}?
 
select yn in "Yes" "No"; do
   case $yn in
      Yes ) break;;
      No ) exit;;
   esac
done
 
echo offline &gt; /sys/block/$DISK/device/state
 
echo 1 &gt; /sys/block/$DISK/device/delete
 
echo DONE
 
exit;</pre><p>其下有人追问，那如何才能再让它“联机”回来。另一个人做了一个简单回答。</p>
<p>（脚本中的）offline 和 1 是不同的（作用），前者使得磁盘在系统的块设备子系统中不可用，而后者会在物理上通知驱动器断电。重新扫描的动作不会使得系统将离线的磁盘加回来的原因在于，内核记忆了它的离线状态。要想在线回来的话，有个吊诡的地方是，需要使用的状态词不是直觉的 online，而是 running。但在 offline 和 running 之间切换的前提是不能 delete。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2024/04/25/linux-%e4%b8%8b%e5%a6%82%e4%bd%95%e4%bd%bf%e7%a1%ac%e7%9b%98%e7%a6%bb%e7%ba%bf%ef%bc%88%e8%84%b1%e6%9c%ba%ef%bc%89/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>锁定 Waydroid 的屏幕方向</title>
		<link>https://www.somedoc.net/2024/04/10/%e9%94%81%e5%ae%9a-waydroid-%e7%9a%84%e5%b1%8f%e5%b9%95%e6%96%b9%e5%90%91/</link>
					<comments>https://www.somedoc.net/2024/04/10/%e9%94%81%e5%ae%9a-waydroid-%e7%9a%84%e5%b1%8f%e5%b9%95%e6%96%b9%e5%90%91/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Wed, 10 Apr 2024 12:54:20 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[问题解决]]></category>
		<category><![CDATA[Waydroid]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=5958</guid>

					<description><![CDATA[Waydroid 下运行 app，时不时内容显示就会自动旋转 <a href="https://www.somedoc.net/2024/04/10/%e9%94%81%e5%ae%9a-waydroid-%e7%9a%84%e5%b1%8f%e5%b9%95%e6%96%b9%e5%90%91/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>Waydroid 下运行 app，时不时内容显示就会自动旋转成头左脚右的方向，但鼠标的响应区域却又没有旋转，导致不到你要歪着脖子看，而且还没办法去点击 app 显示内容的下半部分（当然也就是屏幕上的右半部分）。</p>
<p>苦恼了一阵，决定还是要解决一下，要不然操作太烦。在<a href="https://github.com/waydroid/waydroid/issues/584">问题区</a>找到这么个命令：</p>
<p><code>waydroid shell wm set-user-rotation lock 0</code></p>
<p>应该是强制锁定了旋转角度，用起来好不少。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2024/04/10/%e9%94%81%e5%ae%9a-waydroid-%e7%9a%84%e5%b1%8f%e5%b9%95%e6%96%b9%e5%90%91/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[Linux] 命令行下连接无线网络</title>
		<link>https://www.somedoc.net/2024/03/18/linux-%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%8b%e8%bf%9e%e6%8e%a5%e6%97%a0%e7%ba%bf%e7%bd%91%e7%bb%9c/</link>
					<comments>https://www.somedoc.net/2024/03/18/linux-%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%8b%e8%bf%9e%e6%8e%a5%e6%97%a0%e7%ba%bf%e7%bd%91%e7%bb%9c/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Mon, 18 Mar 2024 12:54:38 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[电脑]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[问题解决]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=5924</guid>

					<description><![CDATA[因为点小事，把原来是 Ubuntu 的 ThinkPad E <a href="https://www.somedoc.net/2024/03/18/linux-%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%8b%e8%bf%9e%e6%8e%a5%e6%97%a0%e7%ba%bf%e7%bd%91%e7%bb%9c/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>因为点小事，把原来是 Ubuntu 的 ThinkPad E545 下半身里装了个 CentOS 7.9，没有图形界面。连接无线网络是个不熟悉的活儿，所以就得记录一下。</p>
<p><code>wpa_supplicant</code> 跟 <code>wpa_cli</code> 是有的。这前后两者是服务器和客户端的关系，所以先要把服务器跑起来。按照 wpa_supplicant 的输出帮助，其典型用法如 <code>wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf</code>，在实际环境中看了一下，<code>wpa_supplicant.conf</code> 配置文件是有一个现成的，位置在 <code>/etc/wpa_supplicant</code> 下，文件里的内容只有两行，</p>
<blockquote><p>
</p><pre class="crayon-plain-tag">ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel</pre><p>
</p></blockquote>
<p>。<code>-i</code> 参数的接口也可以通过 <code>ip link</code> 命令看到，唯独 <code>-D</code> 所需的驱动名不知道该怎么写。不知道怎么写就不写呗，先试试，既不犯法也不要命，于是，<code>wpa_supplicant -iwlp3s0 -c/etc/wpa_supplicant/wpa_supplicant.conf</code> 了一下，输出了一行字，似乎成功了。当然了，这是练手，所以没有加 <code>-B</code> 参数让它以守护进程的方式运行到后台。</p>
<p>接下来就要摆弄 <code>wpa_cli</code> 了。首先是 <code>wpa_cli scan</code>，在输出的内容里首先是说它帮着自动选择了一个接口，名叫 <code>p2p_dev_wlp3s0</code>，由于后缀里有真实设备名，还以为前半部分的前缀是惯例，可是用 <code>wpa_cli scan_results</code> 命令查看扫描结果的时候，结果为空。于是 <code>ls -l /var/run/wpa_supplicant</code> 了一下，发现其下有两个文件，一个是前述被自动选中的，另一个则是不带有前缀的真实设备名。于是又分别执行了 <code>wpa_cli -i wlp3s0 scan</code> 和 <code>wpa_cli -i wlp3s0 scan_results</code> 命令，这下就看到周围的接入点名称列表了。</p>
<p>当运行 <code>wpa_cli -i wlp3s0</code> 命令时，即未指定要执行的动作，则会进入交互模式。可以执行 <code>status</code> 查看一些信息，使用 <code>add_network</code> 命令增加一个网络（显然，你应该能想到还有 list_networks 和 remove_network 命令），然后给新增的网络设置属性，<code>set_network 0 ssid "留下买路钱"</code> 指定名称，<code>set_network 0 psk "********"</code> 指定密码，要记住这两个属性指定的时候前后的双引号别漏了。有说还要用 <code>set_network 0 key_mgmt WPA-PSK</code> 指定验证方式的，但老夫的执行结果都是 FAIL。截至目前，这是增加并指定了一个网络的信息，真正要连接到它的话，需要使用 <code>enable_network 0</code> 命令。</p>
<p>很可惜的是，眼看着输出了很多信息，显然是在尝试连接，但最终的结果还是失败了。信息里写道“&lt;3&gt;CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid=&#8221;XXXXX&#8221; auth_failures=5 duration=60 reason=CONN_FAILED” ，老夫暂时将失败原因归结为下半身中内置的无线网卡没有天线，信号过于衰弱所致。后续老夫会动手实践一个信号增强方案，也不知后果会如何，敬请期待。</p>
<p>更新</p>
<p>昨（2024-03-19）晚，老电工来访，于是开始实践信号增强的想法（另文详述）。材料准备上出了点小状况，原本认为无需焊接技的方案需要稍作修订，焊枪一动，也算老电工人尽其才。路由器距离电脑很近，也就不到半米。之前查看信号强度（<code>wpa_cli</code> 的 <code>scan_results</code> 命令输出中带有）为 -76，改造后立刻查看为 -33，后来稳定运行在 -42 上下。执行 <code>enable_network</code> 命令当即成功。接着，还要取得 IP 地址，执行 <code>dhclient</code> 命令即可。</p>
<p>参考资料</p>
<ul>
<li><a href="https://www.cnblogs.com/hokori/p/14168584.html">Linux 使用wpa_supplicant手动配置连接wifi &#8211; hokori &#8211; 博客园 (cnblogs.com)</a></li>
<li><a href="https://www.cnblogs.com/schips/p/12145561.html">Wpa_supplicant 调试故障原因分析 &#8211; schips &#8211; 博客园 (cnblogs.com)</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2024/03/18/linux-%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%8b%e8%bf%9e%e6%8e%a5%e6%97%a0%e7%ba%bf%e7%bd%91%e7%bb%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>5G 频率支棱起</title>
		<link>https://www.somedoc.net/2023/09/05/5g-%e9%a2%91%e7%8e%87%e6%94%af%e6%a3%b1%e8%b5%b7/</link>
					<comments>https://www.somedoc.net/2023/09/05/5g-%e9%a2%91%e7%8e%87%e6%94%af%e6%a3%b1%e8%b5%b7/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Tue, 05 Sep 2023 12:38:41 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[电脑]]></category>
		<category><![CDATA[硬件]]></category>
		<category><![CDATA[问题解决]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=5648</guid>

					<description><![CDATA[有一台 ThinkPad E545 的下半身，装了 Ubun <a href="https://www.somedoc.net/2023/09/05/5g-%e9%a2%91%e7%8e%87%e6%94%af%e6%a3%b1%e8%b5%b7/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>有一台 ThinkPad E545 的下半身，装了 Ubuntu 22.04，在局域网里假模假式当个文件服务器啥的。当时拆掉上半身时，因为拆得太干净，无线网卡的天线就没了，剩下无线网卡自己待在壳子里，信号不好没什么用，还费电，干脆把它也拆了。当然随之而来的问题就是，总得联网吧？</p>
<p>从百宝箱里翻腾出一个十年前的小度 Wi-Fi 来，这玩意儿当年在 Windows 下用官方驱动就会搞一大堆乱七八糟的东西进来，但在 Linux 却是一块标准的无线网卡，这回正好废物利用。插上以后，又发现了个问题。路由器是又耳哥搞的，他当初不知怎么手潮了一下，结果只起了 5G 的热点，2.4G 的热点没搞。而这小度 Wi-Fi 不支持 5G，联不进去。</p>
<p>他周六鼓捣了一天也没把 2.4G 网络搭起来，老夫只好在闲鱼上下单了一块新的 USB 无线网卡，价格实惠量又足，600M 的双频无线网卡，个头也不大，RTL8811CU 的方案，22 块钱还包邮，显然没有挑三拣四的理由。到手后插到 Ubuntu 机器上，<code>lsusb</code> 能看到，但是没有自动驱动起来。</p>
<p><a href="https://askubuntu.com/questions/1162974/wireless-usb-adapter-0bdac811-realtek-semiconductor-corp">网上说有两个仓库</a>，一老一新，也就是 https://github.com/brektrou/rtl8821CU.git 和 https://github.com/morrownr/8821cu-20210916.git。老夫虽然两个都 clone 下来了，但首选肯定是新的那个。</p>
<p>进入到目录里，根据看到的指引直接执行 <code>sudo ./install-driver.sh</code>（事先还执行了 <code>sudo apt install build-essential dkms</code> 以防缺少编译设施支撑），结果这个脚本很快执行到结尾，提示（并同时建议）我打开配置文件看看是否要定制什么，并提示（并同时建议）最好立刻重启。重启之后，网卡仍未如愿驱动成功，到源代码根目录下搜索 <code>*.ko</code> 文件一无所获。无奈，只好先手动执行 <code>make</code>，这次，编译过程肉眼可见，缓缓进行；完成后也有了 8821cu.ko 文件。接着执行 <code>sudo make install</code>，再执行 <code>sudo modprobe 8821cu</code>。这下 Wi-Fi 网络就顿时出现了，那些 5G 热点也都出现在列表里了，圆满成功。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2023/09/05/5g-%e9%a2%91%e7%8e%87%e6%94%af%e6%a3%b1%e8%b5%b7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ubuntu 22.04 下体验 Waydroid</title>
		<link>https://www.somedoc.net/2023/05/10/ubuntu-22-04-%e4%b8%8b%e4%bd%93%e9%aa%8c-waydroid/</link>
					<comments>https://www.somedoc.net/2023/05/10/ubuntu-22-04-%e4%b8%8b%e4%bd%93%e9%aa%8c-waydroid/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Wed, 10 May 2023 15:12:02 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[问题解决]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=5507</guid>

					<description><![CDATA[Waydroid 是 Linux 下使用容器技术运行 And <a href="https://www.somedoc.net/2023/05/10/ubuntu-22-04-%e4%b8%8b%e4%bd%93%e9%aa%8c-waydroid/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>Waydroid 是 Linux 下使用容器技术运行 Android 的一个产品。它有点像 Docker 而不是 Virtual Box。官方针对各种 Linux 发行版的安装文档在 <a href="https://docs.waydro.id/usage/install-on-desktops">https://docs.waydro.id/usage/install-on-desktops</a> 可以找到。</p>
<p>安装 Waydroid 成功后，再下载需要的 Android 映像，之后就可以启动 Android 了。要向 Android 中安装 apk 的话，可以使用 <code>waydroid app install</code> 命令。要是想在 Android 内部执行命令（非 GUI 应用），则可以使用 <code>sudo waydroid shell</code>。这样的用法，看上去又和 adb 类似。</p>
<p>第一个要解决的问题是 Play Store，要执行这些命令（信息源：https://github.com/casualsnek/waydroid_script）：</p>
<ul>
<li>前提：<code>sudo apt install lzip sqlite</code></li>
<li>安装 OpenGapps：
<ul>
<li><code>git clone https://github.com/casualsnek/waydroid_script</code></li>
<li><code>cd waydroid_script</code></li>
<li><code>sudo python3 -m pip install -r requirements.txt</code>，这是安装此脚本工具所需的依赖</li>
<li><code>sudo python3 main.py -g</code>，这是安装 OpenGapps</li>
<li><code>waydroid show-full-ui</code>，启动 Android，请等待完全启动就绪</li>
<li><code>sudo python3 main.py -i</code>，获取 Android ID 以便注册设备</li>
</ul>
</li>
</ul>
<p>笔者在获取 Android ID 时遇到了错误，命令行执行后一直报以下信息：</p>
<blockquote><p>ERROR: Cannot access gservices.db, make sure gapps is installed and waydroid was started at least once after installation and make sure waydroid is running !</p></blockquote>
<p>所以只好自己再去寻找答案，找到 https://github.com/waydroid/waydroid/issues/753，其中提到可以执行 <code>sudo grep android_id ~/.local/share/waydroid/data/data/com.google.android.gms/shared_prefs/Checkin.xml | cut -f2 -d"&gt;" | cut -f1 -d"&lt;"</code>。后来发现，其实也可以在 waydroid shell 中执行 <code>sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"</code> 获取到。</p>
<p>然后用浏览器打开 <a href="https://www.google.com/android/uncertified/?pli=1">https://www.google.com/android/uncertified/?pli=1</a>，使用 Google 账户登录后，把上面取得的 Android ID 填进去进行注册。注册成功后，在命令行执行 <code>sudo waydroid session stop</code> 以确保 Waydroid 完全退出，然后重新启动 Waydroid。此时再打开 Play Store 应用，就可以像正常手机上那样登录，并下载安装应用了。</p>
<p>笔者另外还遇到了 Waydroid 内的 Android 网络不通的情况，折腾 Wi-Fi 连接许久无果，后来的某次重启系统后，Waydroid 内的 Android 突然以有线连接的方式联网了，就这么将就着往下用了。</p>
<p>更新（2025-04-23）：</p>
<p>时隔两年，又安装了一次。有几个小点明确一下。</p>
<ul>
<li>最开头 apt 安装的 <code>sqlite</code> 要改为 <code>sqlite3</code> 了；</li>
<li>Linux 确实需要一次重启，Waydroid 的网络才能工作；</li>
<li>上面在数据库中检索 android_id 的 SQL 语句，在 Google 网站的页面上已经写为 <code>sqlite3 /data/user/$(cmd activity get-current-user)/*/*/gservices.db \<br />
"select * from main where name = \"android_id\";"</code>；但事实是仍会报找不到 android_id 这一列，把 <code>where</code> 子句去除，然后拼接上 grep 过滤即可；</li>
<li>注册成功后，Google Play 可能要等比较久才认可设备，网帖上说的“久”是三五分钟，本人实际是好几个小时。</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2023/05/10/ubuntu-22-04-%e4%b8%8b%e4%bd%93%e9%aa%8c-waydroid/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[ChatGPT] 为什么在 Windows 下看不到 WSL 中 mount 上的分区中的内容</title>
		<link>https://www.somedoc.net/2023/04/23/chatgpt-%e4%b8%ba%e4%bb%80%e4%b9%88%e5%9c%a8-windows-%e4%b8%8b%e7%9c%8b%e4%b8%8d%e5%88%b0-wsl-%e4%b8%ad-mount-%e4%b8%8a%e7%9a%84%e5%88%86%e5%8c%ba%e4%b8%ad%e7%9a%84%e5%86%85%e5%ae%b9/</link>
					<comments>https://www.somedoc.net/2023/04/23/chatgpt-%e4%b8%ba%e4%bb%80%e4%b9%88%e5%9c%a8-windows-%e4%b8%8b%e7%9c%8b%e4%b8%8d%e5%88%b0-wsl-%e4%b8%ad-mount-%e4%b8%8a%e7%9a%84%e5%88%86%e5%8c%ba%e4%b8%ad%e7%9a%84%e5%86%85%e5%ae%b9/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Sun, 23 Apr 2023 04:29:01 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[问题解决]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=5494</guid>

					<description><![CDATA[前情 在 Windows 10 里，要在 WSL 内 mou <a href="https://www.somedoc.net/2023/04/23/chatgpt-%e4%b8%ba%e4%bb%80%e4%b9%88%e5%9c%a8-windows-%e4%b8%8b%e7%9c%8b%e4%b8%8d%e5%88%b0-wsl-%e4%b8%ad-mount-%e4%b8%8a%e7%9a%84%e5%88%86%e5%8c%ba%e4%b8%ad%e7%9a%84%e5%86%85%e5%ae%b9/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<h2>前情</h2>
<p>在 Windows 10 里，要在 WSL 内 mount 另一个 ext 分区，是有一些限制的。首先是对 WSL 本身，要求必须是从 Microsoft Store 下载的版本，而非系统自带版本。否则的话，<code>--mount</code> 命令就不被支持。其次，由于 <code>wsl.exe --mount</code> 会是<a href="https://learn.microsoft.com/en-us/windows/wsl/wsl2-mount-disk">挂载整个磁盘</a>，因此要求此时 Windows 不能对该盘正在占用。当 <code>wsl.exe --mount</code> 挂载磁盘成功后，就可以转到 Linux 子系统中使用 <code>mount</code> 命令挂载指定的分区了。</p>
<h2>ChatGPT</h2>
<p>从某个版本开始，Windows 的资源管理器中会将 WSL 中的所有 Linux 子系统列出，并可以将其中的目录树展开访问。因此我误以为在 Linux 子系统里 mount 上的 ext4 分区中的内容也可以借由此途径暴露出来。事实是当试图访问时，分区内为空白。就此事请教了 ChatGPT，发现其对此处的情况相当了解。把未作改动的交互转录于下（ME 是我，CG 是 ChatGPT）。</p>
<div class="flex flex-grow flex-col gap-3">
<div class="min-h-[20px] flex flex-col items-start gap-4 whitespace-pre-wrap">ME：在 WSL 中 mount 的 ext4 分区，其中的文件在 Windows 10 资源管理器的 Linux 文件夹下无法看到，可能的原因是什么呢？</div>
</div>
<div class="flex flex-grow flex-col gap-3">
<div class="min-h-[20px] flex flex-col items-start gap-4 whitespace-pre-wrap">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>CG：在 WSL 中 mount 的 ext4 分区，默认情况下是无法在 Windows 10 资源管理器的 Linux 文件夹下看到的。这是因为 WSL 文件系统和 Windows 文件系统是相互独立的，它们有各自的目录树和文件命名约定。虽然你可以通过在 WSL 中使用 
			<span id="crayon-68db143e517be194143190" class="crayon-syntax crayon-syntax-inline  crayon-theme-visual-assist crayon-theme-visual-assist-inline crayon-font-droid-sans-mono" style="font-size: 13px !important; line-height: 16px !important;font-size: 13px !important;"><span class="crayon-pre crayon-code" style="font-size: 13px !important; line-height: 16px !important;font-size: 13px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">explorer</span><span class="crayon-sy">.</span><span class="crayon-i">exe</span><span class="crayon-h"> </span><span class="crayon-sy">.</span></span></span> 命令来打开资源管理器并浏览 WSL 文件系统，但这并不是一个直接在资源管理器中访问 WSL 文件系统的解决方案。</p>
<p>如果你希望在 Windows 10 资源管理器的 Linux 文件夹下看到 WSL 中 mount 的 ext4 分区中的文件，可以使用以下方法：</p>
<ol>
<li>使用某些第三方软件或扩展来实现：例如，你可以安装“DiskInternals Linux Reader”或“Ext2Fsd”等第三方软件，或使用“WinFsp”扩展来挂载 ext4 分区并在资源管理器中访问它们。</li>
<li>在 WSL 中创建软链接或符号链接：你可以在 WSL 中使用 
			<span id="crayon-68db143e517c2595323262" class="crayon-syntax crayon-syntax-inline  crayon-theme-visual-assist crayon-theme-visual-assist-inline crayon-font-droid-sans-mono" style="font-size: 13px !important; line-height: 16px !important;font-size: 13px !important;"><span class="crayon-pre crayon-code" style="font-size: 13px !important; line-height: 16px !important;font-size: 13px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">ln</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-v">s</span></span></span> 命令创建一个软链接或符号链接，将 ext4 分区中的目录链接到 Windows 文件系统中的某个目录。这样，在资源管理器中访问该目录时，实际上是访问了 ext4 分区中的目录。</li>
</ol>
<p>需要注意的是，在使用第一种方法时，你需要在 Windows 上安装额外的软件，并且存在一定的安全风险。在使用第二种方法时，需要手动创建软链接或符号链接，并且需要注意链接的目录和文件权限。</p>
</div>
</div>
</div>
<div class="flex flex-grow flex-col gap-3">
<div class="min-h-[20px] flex flex-col items-start gap-4 whitespace-pre-wrap">ME：但是，除了这个手动 mount 的分区，其它 Linux 子系统内的文件都可以看到，它们理论上也应该是位于 ext4 分区格式的存储上吧？这两者有什么区别吗？</div>
</div>
<div class="flex flex-grow flex-col gap-3">
<div class="min-h-[20px] flex flex-col items-start gap-4 whitespace-pre-wrap">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>CG：对于 WSL 中手动 mount 的 ext4 分区，如果你想要在 Windows 10 资源管理器的 Linux 文件夹下访问其中的文件，需要使用第一种方法或第二种方法中的一种。而对于 WSL 中自动挂载的 ext4 分区，它们实际上是挂载在 WSL 文件系统的某个子目录下，这些子目录是可以直接在 Windows 10 资源管理器的 Linux 文件夹下访问的。</p>
<p>默认情况下，WSL子系统使用的文件系统是ext4，但是与WSL文件系统（通过lxfs格式）不同，挂载的ext4文件系统使用的是特殊的drvfs格式。该drvfs格式是WSL自动挂载文件系统时使用的一种文件系统格式，允许将Windows文件系统的路径映射到WSL文件系统中的路径。</p>
<p>因此，对于 WSL 中自动挂载的 ext4 分区和手动挂载的 ext4 分区，它们之间存在区别。对于自动挂载的 ext4 分区，它们挂载在 WSL 文件系统的子目录下，可以直接在 Windows 10 资源管理器的 Linux 文件夹下访问，而手动挂载的 ext4 分区则需要使用第一种方法或第二种方法中的一种才能在 Windows 10 资源管理器的 Linux 文件夹下访问。</p>
</div>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2023/04/23/chatgpt-%e4%b8%ba%e4%bb%80%e4%b9%88%e5%9c%a8-windows-%e4%b8%8b%e7%9c%8b%e4%b8%8d%e5%88%b0-wsl-%e4%b8%ad-mount-%e4%b8%8a%e7%9a%84%e5%88%86%e5%8c%ba%e4%b8%ad%e7%9a%84%e5%86%85%e5%ae%b9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Linux 下使用电池维护工具</title>
		<link>https://www.somedoc.net/2023/01/28/linux-%e4%b8%8b%e4%bd%bf%e7%94%a8%e7%94%b5%e6%b1%a0%e7%bb%b4%e6%8a%a4%e5%b7%a5%e5%85%b7/</link>
					<comments>https://www.somedoc.net/2023/01/28/linux-%e4%b8%8b%e4%bd%bf%e7%94%a8%e7%94%b5%e6%b1%a0%e7%bb%b4%e6%8a%a4%e5%b7%a5%e5%85%b7/#respond</comments>
		
		<dc:creator><![CDATA[张三太爷]]></dc:creator>
		<pubDate>Sat, 28 Jan 2023 14:47:03 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[电脑]]></category>
		<category><![CDATA[软件]]></category>
		<guid isPermaLink="false">https://www.somedoc.net/?p=5369</guid>

					<description><![CDATA[很多使用小黑的朋友，即便到了现在，也经常念念不忘 Think <a href="https://www.somedoc.net/2023/01/28/linux-%e4%b8%8b%e4%bd%bf%e7%94%a8%e7%94%b5%e6%b1%a0%e7%bb%b4%e6%8a%a4%e5%b7%a5%e5%85%b7/" class="more-link">[&#8230;]</a>]]></description>
										<content:encoded><![CDATA[<p>很多使用小黑的朋友，即便到了现在，也经常念念不忘 ThinkPad 的 Power Manager 即电源管理工具。可惜的是，联想从来没有官方支持过 Linux 操作系统，让它出 Linux 下的电源管理工具显然不太可能。</p>
<p>今天又到手了一台 ThinkPad X200，没有要电源适配器、电池、硬盘这三样，一百七十块包邮。到手后看了一下成色，算是不错的。为了早点测试一下各个部件的工作情况就给卖家确认收货，把原来自用的那台 X200 脱手后余下闲置的装了 Debian 系统的 SD 卡插上，开机启动。屏幕、声音、网络、键盘、指点杆这些工作都正常，还把好久以来认为死了的 X200 四芯电池也装上来，心想尽管无法充电不能使用，但好歹可以补上物理位置的空虚。不料用了一阵子发现屏幕下的指示灯竟然变绿了！电池貌似又活了过来。</p>
<p>再想看一下具体信息，系统里似乎就没用工具了。搜索到了一个叫做 tlp 的工具，说可以在 Linux 下管理/维护电池。该工具的官网链接是 <a href="https://linrunner.de/tlp/index.html">https://linrunner.de/tlp/index.html</a>，Github 仓库地址为 <a href="https://github.com/linrunner/TLP">https://github.com/linrunner/TLP</a>。按照官网说明安装了工具本身，并根据 <code>tlp stat</code> 的输出结果安装了适合 ThinkPad X200 的附加内核模块 <code>tp-smapi-dkms</code>。</p>
<p>最终命令行下执行 <code>tlp stat</code>，电池的信息如下：</p><pre class="crayon-plain-tag">+++ ThinkPad Extended Battery Functions
tp-smapi   = active
tpacpi-bat = inactive (unsupported hardware)

+++ ThinkPad Battery Status: BAT0 (Main / Internal)
/sys/devices/platform/smapi/BAT0/manufacturer               = SANYO
/sys/devices/platform/smapi/BAT0/model                      = 42T4646
/sys/devices/platform/smapi/BAT0/manufacture_date           = 2009-12-11
/sys/devices/platform/smapi/BAT0/first_use_date             = 2010-03-15
/sys/devices/platform/smapi/BAT0/cycle_count                =    292
/sys/devices/platform/smapi/BAT0/design_capacity            =  28800 [mWh]
/sys/devices/platform/smapi/BAT0/last_full_capacity         =   6890 [mWh]
/sys/devices/platform/smapi/BAT0/remaining_capacity         =   6850 [mWh]
/sys/devices/platform/smapi/BAT0/remaining_percent          =    100 [%]
/sys/devices/platform/smapi/BAT0/remaining_running_time_now = not_discharging [min]
/sys/devices/platform/smapi/BAT0/remaining_charging_time    =      1 [min]
/sys/devices/platform/smapi/BAT0/power_now                  =   8987 [mW]
/sys/devices/platform/smapi/BAT0/power_avg                  =   8987 [mW]
/sys/devices/platform/smapi/BAT0/state                      = charging

/sys/devices/platform/smapi/BAT0/start_charge_thresh        =     96 [%]
/sys/devices/platform/smapi/BAT0/stop_charge_thresh         =    100 [%]
/sys/devices/platform/smapi/BAT0/force_discharge            =      0

Charge                                                      =   99.4 [%]
Capacity                                                    =   23.9 [%]</pre><p>据说还可以执行 <code>tlp recalibrate</code> 命令对电池电量进行校正，有空再说。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.somedoc.net/2023/01/28/linux-%e4%b8%8b%e4%bd%bf%e7%94%a8%e7%94%b5%e6%b1%a0%e7%bb%b4%e6%8a%a4%e5%b7%a5%e5%85%b7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
