2021年March月 发布的文章

Linux下解决同一硬盘因为连接设备不一样导致扇区大小不一致的问题

我有块硬盘放进了我家云盒子里面,前段时间想把这个硬盘拿出来插到电脑上面拷贝数据,结果发现分区表完全是乱的,分区变小了很多,在电脑上调整了分区表以后大小对了,放回我家云盒子,分区表又变得不合法了。

仔细研究了一下,发现硬盘直接接在电脑上面时候,扇区大小是 512 字节的,但是接在我家云盒子上面,扇区的大小是 4096 字节。之前有人说有些 USB 硬盘线也会造成这样的效果,大概也是相同的情况。分区表里面的单位都是按照扇区大小来计算的,所以分区大小自然也就不一样了

知道了这个原因就是想解决方式了。Linux 下面解决起来倒是简单,loop 设备设置的时候可以用 –sector-size 来设置大小,因此我们只要先不着急 mount 硬盘,用 losetup 设置一个扇区大小是 512 字节的 loop 设备。之后在 loop 设备上面再分区和格式化,就可以让这个硬盘在电脑上也可以正常读取了。

需要注意的是,不同的设备有可能导致最终看到的扇区数也是不一样的,我实测电脑比我家云盒子多看到几KB的大小,因此在 losetup 时候通常需要手动加上 –sizelimit 的值。

例如

losetup -P –sector-size 4096 –sizelimit 3000591892480 -f /dev/sda

之后直接对 loop 设备分区啥的就都很正常了

RHEL/CentOS/OracleLinux 8 yum 能看到,安装却没有的情况

最近发现 CentOS 强制升级到 OracleLinux 8 以后有些包用 yum search 可以看到,但是 yum install 却说没有。比如 golang 就是这样的。

简单研究了一下,是因为 RHEL8 里面引入了 module 的概念,可以把一些软件包给做成 module , 可以自己选择用哪个分叉,比如 gcc8 和 9 会依赖完全不同的两套软件包,这就可以做成两个不同版本的 module 。 yum search 能看到,但是安装不了就是因为 module 信息乱了,选了一个不存在的版本。

解决方案是 yum module reset , 有哪些 module 可以 yum module list 看,比如 golang 的就是 go-toolset,执行 yum module reset go-toolset 以后, yum install golang 就成功了。

最近评论

时光机

其他