首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法移除陈旧的音量

无法移除陈旧的音量
EN

Unix & Linux用户
提问于 2016-01-04 05:21:27
回答 2查看 2.8K关注 0票数 1

我有一个外部硬盘驱动器连接到我的Ubuntu笔记本通过USB。整个硬盘都是加密的。在加密层旁边有一个LVM卷,我将其挂载到/mnt/es。一旦打开,lsblk就把它看作是:

代码语言:javascript
复制
sdc                                          8:32   0   2.7T  0 disk  
└─es (dm-6)                                252:6    0   2.7T  0 crypt 
  └─externalstorage-externalstorage (dm-7) 252:7    0   2.7T  0 lvm   /mnt/es

有时,硬盘会与卷“分离”,在这种情况下,数据变得不可访问:

代码语言:javascript
复制
sdc                                        8:32   0   2.7T  0 disk  
es (dm-6)                                252:6    0   2.7T  0 crypt 
└─externalstorage-externalstorage (dm-7) 252:7    0   2.7T  0 lvm

我注意到,这种情况通常发生在笔记本电脑入睡时。

现在的问题是,一旦sdc分离了去过吗?,我就不能去掉两个陈旧的卷esexternalstorage-externalstorage,以便再次重用它们的名称。我做的第一件事是umount /mnt/es,它做得很好。但是,即使没有安装音量,我也不能删除它:

代码语言:javascript
复制
dmsetup remove --force /dev/mapper/externalstorage-externalstorage
device-mapper: resume ioctl on externalstorage-externalstorage failed: Invalid argument
device-mapper: remove ioctl on externalstorage-externalstorage failed: Device or resource busy
Command failed

info命令显示卷是打开的:

代码语言:javascript
复制
dmsetup info -c /dev/mapper/externalstorage-externalstorage
Name                            Maj Min Stat Open Targ Event  UUID                                                                
externalstorage-externalstorage 252   7 L--w    1    1      0 LVM-R4bAWzxJ8Cy3MBIjmPps60Rd3cFVyBStxTeKaR6gBHdefTYfJNWhHfA8tzqOBHns

下面是这卷书的内容,但它并没有告诉我多少:

代码语言:javascript
复制
fuser -m /dev/mapper/externalstorage-externalstorage
Cannot stat file /proc/5687/fd/4: Stale file handle
Cannot stat file /proc/5687/fd/5: Stale file handle
Cannot stat file /proc/5687/fd/6: Stale file handle
Cannot stat file /proc/5687/fd/7: Stale file handle
Cannot stat file /proc/5687/fd/11: Stale file handle

从LVM的角度来看,它也是不可访问的:

代码语言:javascript
复制
pvdisplay
  /dev/externalstorage/externalstorage: read failed after 0 of 4096 at 2981780979712: Input/output error
  /dev/externalstorage/externalstorage: read failed after 0 of 4096 at 2981781037056: Input/output error
  /dev/externalstorage/externalstorage: read failed after 0 of 4096 at 0: Input/output error
  /dev/externalstorage/externalstorage: read failed after 0 of 4096 at 4096: Input/output error

有趣的是,在这一点上,cryptsetup luksClose es可以重复任何次数,没有任何明显的影响或错误信息。

那么,我如何摆脱那些陈旧的卷(除了重新启动)?是否有任何方法来防止问题发生在第一,即为什么sdc不时分离?

Ubuntu14.04.3 LTS,内核3.19.0-42-泛型

更新

vgchange -an会产生类似的错误,如下所示:

代码语言:javascript
复制
/dev/mapper/es: read failed after 0 of 4096 at 3000590794752: Input/output error
/dev/mapper/es: read failed after 0 of 4096 at 3000590876672: Input/output error
/dev/mapper/es: read failed after 0 of 4096 at 0: Input/output error
/dev/mapper/es: read failed after 0 of 4096 at 4096: Input/output error
/dev/externalstorage/externalstorage: read failed after 0 of 4096 at 2981780979712: Input/output error
/dev/externalstorage/externalstorage: read failed after 0 of 4096 at 2981781037056: Input/output error
/dev/externalstorage/externalstorage: read failed after 0 of 4096 at 0: Input/output error
/dev/externalstorage/externalstorage: read failed after 0 of 4096 at 4096: Input/output error
EN

回答 2

Unix & Linux用户

发布于 2016-01-04 06:48:34

这更像是一种猜测,但看起来在删除地窖映射之前,您需要解除lvm的活动,基本上是从内部返回:

首先,您需要在lvm上收集任何陈旧的fs:

代码语言:javascript
复制
umount -f /mnt/es

然后,关闭您似乎在密码设置之上的lvm。即使您有其他vgs,如果使用任何其他vg,以下内容也应该禁用它所能激活的任何内容,而不会损害系统:

代码语言:javascript
复制
vgchange -an

在此之后,您可以使用dmsetup来删除由cryptsetup(!)创建的映射。

代码语言:javascript
复制
dmsetup remove externalstorage

(我可能弄错了一些名字,请随时更正)

这似乎是一个基本的问题,在睡眠期间,您的USB驱动器正在从总线上掉落,当它回来时,块系统发现sdb消失了,尽管现在有一个sdc。

票数 4
EN

Unix & Linux用户

发布于 2019-04-03 08:47:44

  1. 根据需要关闭设备的所有用户和备份设备数据。
  2. 使用umount卸载安装设备的任何文件系统。
  3. 使用该设备从任何md和LVM卷中删除该设备。如果设备是LVM卷组的成员,则可能需要使用pvmove命令将数据从设备上移出,然后使用vgreduce命令删除物理卷,并(可选地) pvremove从磁盘中删除LVM元数据。
  4. 如果设备使用多路径,运行multipath -l并记录设备的所有路径。然后,使用multipath -f device删除多路径设备。
  5. 运行blockdev --flushbufs设备,将任何未完成的I/O刷新到设备的所有路径。这对于原始设备尤其重要,因为没有umount或vgreduce操作可以导致I/O刷新。
  6. 删除系统上的应用程序、脚本或实用程序中对设备基于路径的名称的任何引用,如/dev/sd/dev/disk/by-pathmajor:minor编号。这对于确保将来添加的不同设备不会被误认为是当前设备是很重要的。
  7. 最后,从SCSI子系统删除设备的每个路径。要做到这一点,可以使用命令echo 1 > /sys/block/device-name/device/delete,其中设备名称可能是sde。此操作的另一个变体是echo 1 > /sys/class/scsi_device/h:c:t:l/device/delete,其中h是HBA号,c是HBA上的通道,t是SCSI目标ID,l是LUN。

有关更多细节,请参阅红帽文件

此外,您还可以使用sg_utils脚本删除陈旧的卷使用rescan-scsi-bus.sh

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/253104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档