环境:两块机械硬盘组LVM,500GB+1TB的配置;一块nvme固态硬盘安装了windows10,系统重新安装为:Ubuntu 18.04 Desktop

最近因为主机重新配置,需要重装系统,然而在重装系统之前,没有进行lvm配置备份,结果安装完毕后发现悲剧了,系统找不到lvm卷。

慌张了几秒后开始冷静思考:我只是在nvme固态上重新安装了系统,并没有动lvm卷的硬盘,所以理论上应该是可以恢复的。 然后开始搜索怎么来恢复它,结果还真被我找到了:

桌面级的ubuntu默认不带lvm,所以要先安装lvm:sudo apt install lvm2

用pvscan或者pvdisplay看看pv还在不在:

root@ubuntu:~# pvscan
  PV /dev/sdb1   VG lvmdata         lvm2 [<931.51 GiB / 0    free]
  PV /dev/sdc1   VG lvmdata         lvm2 [<465.76 GiB / 996.00 MiB free]
  Total: 2 [1.36 TiB] / in use: 2 [1.36 TiB] / in no VG: 0 [0   ]

root@ubuntu:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               lvmdata
  PV Size               931.51 GiB / not usable 4.69 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              238466
  Free PE               0
  Allocated PE          238466
  PV UUID               wr9hSs-arh6-1kcE-NcDa-1PaT-J1de-ab4d0k

  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               lvmdata
  PV Size               465.76 GiB / not usable <3.01 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              119234
  Free PE               249
  Allocated PE          118985
  PV UUID               Ql5uAu-CwSO-xjM8-A8z7-toY1-E7GQ-QEUBRy

这个结果表示pv还在,接下来来看看vg还在不在:

root@ubuntu:~# vgscan
  Reading volume groups from cache.
  Found volume group "lvmdata" using metadata type lvm2

root@ubuntu:~# vgdisplay
  --- Volume group ---
  VG Name               lvmdata
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               1.36 TiB
  PE Size               4.00 MiB
  Total PE              357700
  Alloc PE / Size       357451 / 1.36 TiB
  Free  PE / Size       249 / 996.00 MiB
  VG UUID               qJKMJQ-B9Wg-ieJw-th3d-IOUZ-KhLW-OTePci

不错,vg没有丢失,接下来来重新激活它:

root@ubuntu:~# vgchange -ay
  1 logical volume(s) in volume group "lvmdata" now active

接下来检查,是否出现了lvm:(我的lvm group名字叫lvmdata)

root@ubuntu:~# ls -l /dev | grep lvmdata
drwxr-xr-x  2 root root          60 3月  30 16:56 lvmdata

接下来就是用mount命令挂载上去就可以了:

root@ubuntu:~# mount /dev/mapper/lvmdata-xx /mnt/lvm

因为我只在lvm上面建立了一块分区,所以在/dev/mapper下只能看到一个设备节点,找个目录挂载下就可以继续访问之前的数据了

Linux真他么坑爹,配置个dns,到处都是配置,你还不知道应该配置哪个才有效。

之前我的ubuntu 18.04 server配置成了dsl-provider直接进行pppoe拨号上网的,改用路由器进行dhcp之后,就出现了各种问题,先是不知道怎么停掉pppoe拨号,接着就是dns时不时的给你故障一下(真是B了狗了)

pppoe那个问题好解决的,直接修改/etc/network/interfaces文件,把里面的关于dsl-provider的都注释掉,然后 /etc/init.d/networking restart 即可

为了保险起见,同时修改了/etc/netplan/xxxxxxx.yaml配置文件:(ens5改成你自己的)

network:
 version: 2
 renderer: networkd
 ethernets:
  ens5:
  Addresses: []
  dhcp4: true
  optional: true

关于dns,下面是从网上搜集而来的各种办法:

最后,终于通过这个方式解决了:

  • /etc/resolv.conf,这是一般修改的文件,但这次改了以后,重启系统后又被改回去了。系统提示该文件是由networkmanager创建的。
  • /etc/systemd/resolved.conf,是resolv服务的配置,改了以后重启服务,好像没啥变化。
  • /run/resolveconf/resolv.conf,有人说是/etc/resolv.conf的连接指向文件,但我的系统没有。
  • dnsmasq,虽然系统安装了,但是配置都是空的,应该没有作用。
  • netplan,这是Ubuntu 18.04的主流配置,大部分人(大概)通过这个进行dns配置就应该能起作用,可惜在我的机器上无效,这很奇怪,不知道改坏了什么,居然不起作用
  • 通过/etc/network/interfaces,在它的最后增加一句:

    dns-nameservers 8.8.8.8     (复制就好,很多人拼写错误)。。。这个好像也不起作用

编辑 /etc/systemd/resolved.conf 这个文件:

[Resolve]
DNS=<用dns地址替换这个等号的右边内容>

重启下 systemd-resolved服务 就ok了😓

在Windows下,jvm默认是使用GBK的,这会导致使用utf-8的jar文件调用输入输出方法,尤其是写文件的时候出现乱码的情况。

为了避免乱码的出现,现汇总一下办法:

  1. 大部分方法是修改IDE/项目配置的。这个适用于有源代码的情况,对于只有一个jar文件来说不适用;
  2. 直接修改cmd的代码页为65001,即UTF-8,可修复乱码问题。这个确实是可以的,但是存在几个问题:首先是其他程序可能使用该代码页会出现乱码情况(GBK?UTF-8?),其次是cmd不支持UNC路径,即网络路径。为了支持UNC路径,你得使用powershell
  3. 在cmd中执行 java -Dfile.encoding=UTF-8 -jar .\xxxx.jar。这个也是一种可行的方案。正如上面一点所述,cmd不支持UNC路径,所以如果要在网络路径下执行,还是得用powershell,但是,powershell中似乎执行会出错,提示:错误: 找不到或无法加载主类 .encoding=UTF-8
  4. 这个方法是修改环境变量,在环境变量中增加一条环境变量配置:变量名为: JAVA_TOOL_OPTIONS ,变量值为:-Dfile.encoding=UTF-8。再次启动时jvm就会默认先改变初始化字符集为UTF-8,既解决了乱码问题,同时也可以正常使用powershell,是比较推荐的一种做法

解决方案参考: https://forum.xda-developers.com/pixel-c/help/device-resource-busy-t3449240

正常将只读的/system分区变成可读写是用下面这个命令:

mount -o remount,rw /system

一般情况下,/system就变成可读写了。但是在某些设备上,会提示Device or resource busy错误。这个时候只需要将-o的两个参数顺序调换一下即可,也就是这样:

mount -o rw,remount /system

下载与安装

首先在docker的注册表中搜索mysql,点击下载, 然后选择版本。我这里选择的是8.0.16的版本

选这个版本的进行下载

下载完成之后,点击启动。这里要注意,配置一个MYSQL_ROOT_PASSWORD的环境变量,否则启动会失败。

记得要设置MYSQL_ROOT_PASSWORD变量(新窗口看大图)

完全启动完成需要等待一段时间,一般3分钟左右,具体可以观察容器详情中的进程一栏,如果mysqld –initialize-insecure进程没有了,取而代之的是mysqld,则表示启动完成。

正在初始化
初始化完成

现在mysql虽然已经启动,但接下来还是要进行配置的。切换到容器详情的终端机一栏,点击新增按钮来创建一个bash,然后就可以像操作linux的shell一样和docker内部进行交互。

设置远程访问

mysql> use mysql;
Reading table information for completion of table and column names                                                                                                   
You can turn off this feature to get a quicker startup with -A                                                                                                       
                                                                                                                                                                     
Database changed
mysql> select host, user, plugin from user;
+-----------+------------------+-----------------------+                                                                                                             
| host      | user             | plugin                |                                                                                                             
+-----------+------------------+-----------------------+                                                                                                             
| %         | root             | caching_sha2_password |                                                                                                             
| localhost | mysql.infoschema | caching_sha2_password |                                                                                                             
| localhost | mysql.session    | caching_sha2_password |                                                                                                             
| localhost | mysql.sys        | caching_sha2_password |                                                                                                             
| localhost | root             | caching_sha2_password |                                                                                                             
+-----------+------------------+-----------------------+                                                                                                             
5 rows in set (0.00 sec)

如果上面关于root的输出只有一个localhost的话,那么这个mysql只能进行本机登录;你需要做的是下面这样处理:(不要相信网上的什么with options,那个已经过时了,在mysql8.0.16中执行会报错)

mysql> CREATE USER 'root'@'%' IDENTIFIED BY '111111';//创建root账户,同时指定密码为111111
// mysql> ALTER USER 'root' IDENTIFIED BY 'password';//这行可以不要
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
mysql> flush privileges;

如果像我上面这样的输出,关于root的输出有一个% ,则代表已经可以进行远程登录了,不需要上述操作。

修改默认的加密方式

mysql8中引入了新的加密方式 caching_sha2_password,而且被设置成了默认的加密方式,这就有可能导致客户端连接出现问题。据我所知,phpMyAdmin即使是4.9版本也不支持这种加密方式,虽然他们在GitHub上把这口锅漂亮的甩给了php。而php版本据说低于7.4的也是不支持的;Navicat Premium 12.0.29版本已经支持这种加密方式了,其他客户端未经测试。所以如果要使用phpMyAdmin等其他客户端的话,建议修改加密方式。

首先要确认,当前的加密方式是什么:

mysql> use mysql;
Reading table information for completion of table and column names                                                                                                   
You can turn off this feature to get a quicker startup with -A                                                                                                       
                                                                                                                                                                     
Database changed
mysql> select host, user, plugin from user;
+-----------+------------------+-----------------------+                                                                                                             
| host      | user             | plugin                |                                                                                                             
+-----------+------------------+-----------------------+                                                                                                             
| %         | root             | caching_sha2_password |                                                                                                             
| localhost | mysql.infoschema | caching_sha2_password |                                                                                                             
| localhost | mysql.session    | caching_sha2_password |                                                                                                             
| localhost | mysql.sys        | caching_sha2_password |                                                                                                             
| localhost | root             | caching_sha2_password |                                                                                                             
+-----------+------------------+-----------------------+                                                                                                             
5 rows in set (0.00 sec)

关于root的两行显示的plugin是caching_sha2_password,我们要将它改成mysql_native_password

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '111111'; 
Query OK, 0 rows affected (0.25 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '111111'; 
Query OK, 0 rows affected (0.22 sec)
//这里的111111是指密码,可以自定义

光这样改过之后还不能用,这个就是很坑爹的地方了。需要另外再给它弄个配置文件,就像这样:

[mysqld]
default-authentication-plugin=mysql_native_password

把它保存成一个文件,然后上传到群晖上(建议另外弄个文件夹保存),把这个文件所在目录挂载到/etc/mysql/conf.d目录上,再启动mysql就能彻底解决问题

就像这样

演示环境:Windows 10 主机 + Ubuntu 18.04 客户机 + VMware Workstation Pro 15,虚拟机磁盘设置在一块256G的SSD上

目标:虚拟机磁盘占用了Windows 10主机的SSD大量空间,现在要压缩这块vmdk来减少磁盘占用

这块vmdk的设置如下,并没有预分配磁盘空间:

虚拟磁盘的设定

看,它占了95GB的SSD空间!简直不可思议!实际上:

实际上这个盘只用了9.5GB

实际上他喵的才仅仅用了9.5GB啊!那么问题来了,该如何才能把那么大的磁盘空间压缩压缩?

接下来就是痛苦的尝试各种 解决方案:

  • 1. 很自然的就想到直接去点击设置里面的那个压缩按钮,然后1秒钟,提示压缩完成。满心欢喜原来压缩这么快,然后看了一下windows资源管理器中的文件大小就知道,根本就没给你压缩
  • 2. dd命令填充0,然后删除文件,然后关闭客户机,然后再去点击那个压缩按钮。过程我就不罗嗦了,dd的过程花了好几分钟,结果还然是1秒钟提示压缩完成。
  • 3. 首先先做个defrag。 sudo e4defrag / 执行完之后再重复2中的步骤,结果依旧是1秒钟。 fuck you~
  • 4. 在3的步骤中执行到删除文件后,再加上一个压缩命令 sudo vmware-toolbox-cmd disk shrinkonly 。结果是不支持?
emm…..?

为什么他喵的不支持???看了一下这个错误的搜索结果,大致分为两种情况:有磁盘快照或者是预分配磁盘。然而我并没有使用任何磁盘快照,也不可能去预分配磁盘。

  • 5. 既然上面这些办法都不好使,那么就用vmware宿主机中的vmware-vdiskmanager吧!执行结果是:Failed to shrink the disk ‘D:\xxx.vmdk’ : An error occurred while writing a file; the disk is full. Data has not been saved. Free some disk space and try again (0x8).

disk is full。。。嗯,什么意思?是说我宿主机的磁盘空间不够了吗?

于是我默默的查看了一下D盘的可用空间,提示为79GB。难道说我得有150GB剩余空间才能成功压缩吗?

抱着试试看的想法,把SSD盘中的乱七八糟的文件搬到其他盘中,现在剩余空间是135GB,先来试试看好不好用。

剩余135GB,试一下看看

首先是关闭客户机 ,以防万一,我把vmware也给X了,重新执行命令。。。

开始压缩了。。。

喔激动一下,它开始shrink了,看来确实是宿主机磁盘空间不够了,所以shrink不了?

压缩完成之后,这个vmdk的大小变成了:

成功压缩了

吃惊,大小居然能压缩到8.83GB这么小!


总结:通过上述实践过程,发现一个要压缩Linux格式的vmdk文件大小的前提条件,而这个前提条件却是各种高票回答都没有提及的:存放vmdk文件的磁盘一定要有足够大的可用空间才能压缩,否则就会1秒钟或者压缩失败。由于磁盘已经被我压缩掉了,而且还是那么多操作都做过来的,所以有些疑问:是否真的需要这么多步骤?是否只要dd后删除dd出来的文件,然后直接点击vmware设置中的压缩按钮就可以了?这些就留待日后有时间吃饱了撑的慢慢测试了

卸载要根据系统版本的不同,使用不同的方法

一、不要想着通过Store去卸载,因为那里面只有安装的按钮,没有卸载的按钮

二、在win10系统版本为秋季创意者更新(Fall Creators Update),也就是RS3,也就是1709之前,可以使用lxrun命令进行卸载操作。没有图,没有命令,也不想去研究,因为我早就更新到1903了。

三、 秋季创意者更新之后,lxrun命令就被移除了,执行lxrun只会提示不是内部或外部命令,也不是可运行的程序或批处理文件。这个时候就需要用wslconfig命令来进行卸载了。

列出当前已经安装且随时可用的发行版:

wslconfig /list

列出所有发行版,包括正在安装、卸载和已损坏的发行版:

wslconfig /list /all

卸载已经安装的发行版:

wslconfig /unregister <这里填你要卸载的名称,只能填写使用wslconfig /list或者wslconfig /list /all中所包含的,不是随便填的>

卸载后也可以在 Store 重新安装发行版。

示例:wslconfig /unregister Ubuntu 会将 Ubuntu 从当前可用的WSL发行版中彻底删除,之后运行 wslconfig /list 时该发行版便不会被列出。该发行版所占用的磁盘空间也会被释放。

注意: 卸载发行版时,会永久删除所有与该发行版有关的数据和设置。

四、卸载完成之后最好再做这么一步:到开始菜单中,找到你安装的发行版,右键,卸载,以保证它彻底被卸载了

如果对wslconfig的其他用处感兴趣,可以参考这里: https://blog.z4hd.cf/wslconfig-usage/

本文转载自: https://www.blackeep.com/1989.html

WordPress鼠标点击特效,可以实现wordpress博客的背景显示”富强”, “民主”, “文明”, “和谐”, “自由”, “平等”, “公正” ,”法治”, “爱国”, “敬业”, “诚信”等文字效果。加上了该段代码,可以让你的网站,在用户任意位置点击鼠标,显示上面文字的特效。

源代码如下,尽情复制:

<script type="text/javascript">
/*  深夜笔记博客  www.blackeep.com  */
var a_idx = 0;
jQuery(document).ready(function($) {
$("body").click(function(e) {
var a = new Array("富强", "民主", "文明", "和谐", "自由", "平等", "公正" ,"法治", "爱国", "敬业", "诚信", "友善");
var $i = $("<span/>").text(a[a_idx]);
a_idx = (a_idx + 1) % a.length;
var x = e.pageX,
y = e.pageY;
$i.css({
"z-index": 999999999999999999999999999999999999999999999999999999999999999999999,
"top": y - 20,
"left": x,
"position": "absolute",
"font-weight": "bold",
"color": "#ff6651"
});
$("body").append($i);
$i.animate({
"top": y - 180,
"opacity": 0
},
1500,
function() {
$i.remove();
});
});
});
</script>

将上面的代码添加到主题页脚(footer.php)文件的 wp_footer() 一行之前即可,然后保存代码上传到服务器,即可实现,如下图红框所示:


本篇讲述如何制作WinPE。我参考了微软的技术文档:
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-create-usb-bootable-drive

首先打开开始菜单,找到Windows Kits并展开,右键“部署和映像工具环境”,以管理员身份运行,如下图所示:

在弹出的cmd窗口中,键入以下命令并按回车。此命令的目的是将PE的工作文件创建到你指定的文件夹中

# 要制作64位WinPE,使用下面这个命令。强烈建议使用64位的WinPE
copype amd64 C:\WinPE_amd64
# 如果是要32位的WinPE,则使用这条命令
copype x86 C:\WinPE
# WinPE和WinPE_amd64目录可以更换成你想要的名称,我自己怕麻烦就选择不更改
PE复制完成

接下来就是将PE烧录到U盘中了,使用如下命令:

# 64位
MakeWinPEMedia /UFD C:\WinPE_amd64 P:
# 32位
MakeWinPEMedia /UFD C:\WinPE P:

注意,P:是U盘的盘符。该命令会格式化U盘(FAT32格式),所以建议找个小容量U盘或者SD卡来操作(几年前淘汰下来的存储设备又可以重新发光发热)。盘符一定不能输入错误,否则就会呵呵。烧录时间根据存储设备的性能不同而不同,请耐心等待结束。

C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>MakeWinPEMedia /UFD C:\WinPE_amd64 E:
WARNING, ALL DATA ON DISK DRIVE E: WILL BE LOST!
Proceed with Format [Y,N]?Y
Formatting E:...

Setting the boot code on E:...

Copying files to E:...


Success

制作完成,可以把U盘插到VMWare中来测试一下效果:

WinPE界面

Emm…看到这个界面就表示WinPE已经制作成功了,这个就是微软的,原汁原味的WinPE。现在可以通过命令行来执行各种命令了。

好了,本篇教程就到这里,下次会讲如何个性化WinPE

首先,让我们去从微软官网上下载ADK。下载地址:
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/download-winpe–windows-pe

微软官网上的说明

然后,确认一下要制作的WinPE的内核版本。如果要制作1809版本及以上的,需要下载ADK和WinPE插件两个程序;如果是1803或者更早期的内核,则只需要下载一个ADK程序即可。注意,两个ADK并不是同一个程序。这里我选择使用1809的版本

下载完成后得到两个程序,上面一个是ADK,下面那个是WinPE Add-on

ADK程序

首先运行上面个adksetup.exe,因为目的是制作WinPE,所以在选择功能的时候,除了部署工具以外的其他功能统统用不到。点击安装后等待完成安装。

选择“部署工具”即可

接着安装下面那个adkwinpesetup.exe。过程中可能会多次跳出下面这个对话框,表示没有网络连接,这种情况下首先检查自己的网络,确认网络没问题的话只需多点几次Retry,基本就能下载成功。

没有网络连接?

下载过程中请耐心等待。。。。下载完成之后,WinPE的部署环境就搭建好了