给 kaldi 的egs 目录搬家

4 篇文章 0 订阅
4 篇文章 0 订阅
本文介绍了如何在Linux环境下,解决kaldi的egs目录占据系统盘空间的问题。提供了两种无感知的egs目录搬家方案,涉及磁盘分区、挂载、文件复制和权限保留等操作。
摘要由CSDN通过智能技术生成

给 kaldi 的egs 目录搬家

img

问题提出

服务器有两块硬盘,一块500G SSD固态硬盘, 一块1.8T机械硬盘。固态盘是系统盘,kaldi装在系统盘上了。最近跑librispeech recipe,疯狂下载数据集,把系统盘空间占满了。kaldi下egs目录占用空间最大,如何不改变kaldi目录结构,将egs内容移动到其它磁盘上,给系统盘的瘦身。

image-20210225173656898

egs目录大小

(base) root@ai-PowerEdge-R740:/# du -sh /opt/asr/kaldi/egs/
251G    /opt/asr/kaldi/egs/

egs内容存储盘是系统盘

(base) root@ai-PowerEdge-R740:/# df -l /opt/asr/kaldi/egs/
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda2      459403376 430221280   5776016  99% /

解决方案

方案1:将/opt/asr/kaldi/egs目录备份到容量充足的磁盘,删除/opt/asr/kaldi/egs目录,新建分区或已有分区挂到/opt/asr/kaldi/egs目录,将备份数据重新拷贝到新挂载目录/opt/asr/kaldi/egs。

将egs目录备份到data目录

cp -p -r /opt/asr/kaldi/egs /data

拷贝成功,删除egs目录内容

rm -rvf /opt/asr/kaldi/egs/*

指定egs目录为机械盘

mount  /dev/sdb2 /opt/asr/kaldi/egs

将备份数据剪切回egs目录

mv /data/egs/* /opt/asr/kaldi/egs

方案2:新建目录/asr_egs,新建分区 /dev/sdb2, 将分区挂载到/asr_egs, 复制/opt/asr/kaldi/egs 目录到/asr_egs,将/asr_egs/egs挂载到/opt/asr/kaldi/egs目录。

新建目录

mkdir /asr_egs

挂载机械盘分区/dev/sdb2 到该目录

mount /dev/sdb2 /asr_egs

复制egs目录到/asr_egs目录

cp -p -r /opt/asr/kaldi/egs /asr_egs

复制成功删除egs目录内容

rm -rvf /opt/asr/kaldi/egs/*

将asr_egs下egs目录绑定到/opt/asr/kaldi/egs目录,两个egs目录下内容相同。

mount --bind  /asr_egs/egs /opt/asr/kaldi/egs

以上两种方式都可以对egs内容实现无感知的搬家.主要区别是mount使用方法不同,前者是通过将驱动直接挂载到目录,因为一个驱动文件系统只能挂载到一个目录下,不能一个目录同时挂几个驱动。这里驱动是指文件系统,或者简单理解为磁盘分区。两者挂载方式都会导致原有目录的内容不可用,所以挂载前最好将原有目录内容备份到其它地方。

mount /dev/sdb_num /some/where #将驱动挂载到目录
mount --bind /some/where /else/where  #将目录挂载到目录

具体操作

查找较大目录

使用命令 df -h / | grep “G” >log 将系统盘下大小Gb以上文件夹占用情况输入到日志文件, vim log 正则匹配 /\d\d\dG 查找100G以上文件夹,找到较大目录,进入较大文件目录,进一步排查占用目录 du -sh

创建可用分区

查看可用磁盘空间

# fdisk -l

找到没挂载的分区

# df -h  查看哪些分区挂载了
# mount  #查看分区挂载到哪些目录

最后找到/dev/sdb磁盘是有可用空间,要使用磁盘,首先先要对磁盘分区

fdisk /dev/sdb  #注意是sdb磁盘,不是sdb_num分区,如sdb1

创建和删除新硬盘分区命令参数如下

fdisk可以用m命令来看fdisk命令的内部命令
a:命令指定启动分区;
d:命令删除一个存在的分区;
l:命令显示分区ID号的列表;
m:查看fdisk命令帮助;
n:命令创建一个新分区;
p:命令显示分区列表;
t:命令修改分区的类型ID号;
w:命令是将对分区表的修改存盘让它发生作用。

如果不用的分区,先删除该分区回收磁盘空间。

删除分区,输入参数 n修改, 输入d删除,输出删除的分区号,输入w保存修改。


创建分区,输入参数n开始创建,输入p创建主分区,输入创建分区号,输入创建分区起始节点,按回车默认,输入终止节点,可以输入分区大小来自动计算终止节点,输入w保存修改

详细操作记录

1. Command (m for help):n
2. Command action
3.      e    extended                  *//输入e为创建扩展分区*
4.      p    primary partition (1-4)      *//输入p为创建逻辑分区*
5. p
6. Partion number(1-4):1      *//在这里输入l,就进入划分逻辑分区阶段了;*
7. First cylinder (51-125, default 51):   *//注:这个就是分区的Start 值;这里最好直接按回车,如果您输入了一个非默认的数字,会造成空间浪费;*
8. Using default value 51
9. Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +800G  #注:这个是定义分区大小的,+200M 就是大小为200M ;当然您也可以根据p提示的单位cylinder的大小来算,然后来指定 End的数值。回头看看是怎么算的;还是用+200M这个办法来添加,这样能直观一点。如果您想添加一个10G左右大小的分区,请输入 +10000M ;
10. 
11. Command (m for help): w                     *//最后输入w回车保存。*

分区创建完成之后需要格式化,格式化分区为文件系统

mkfs.ext3  /dev/sdb2
移动egs内容
方案一操作记录

备份/opt/asr/kaldi/egs目录到/data

使用 cp 命令复制时, 记得带上 -p 参数, 保留文件权限设置. 使用 root 权限, 假设目标目录为 /asr_egs :

# cp -p -r /opt/asr/kaldi/egs /data

删除原目录内容

rm -rvf /opt/asr/kaldi/egs/*

挂载/dev/sdb2 目录到/opt/asr/kaldi/egs。

# mount /dev/sdb2 /opt/asr/kaldi/egs

然后把/data/egs内容剪切到/egs目录下

# move /data/egs/* /opt/asr/kaldi/egs

验证挂载效果

# cd /opt/asr/kaldi/egs
# df -h .
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2      296G   42G  240G  15% /new_disk
方案二操作记录

新建/asr_egs目录,将分区/dev/sdb4挂载到/asr_egs

# mkdir /asr_egs
# mount /dev/sdb4 /asr_egs

使用 cp 命令复制时, 记得带上 -p 参数, 保留文件权限设置. 使用 root 权限, 假设目标目录为 /asr_egs :

# cp -p -r /opt/asr/kaldi/egs /asr_egs

删除原目录内容

rm -rvf /opt/asr/kaldi/egs/*

挂载/asr_egs/egs目录到/opt/asr/kaldi/egs。

# mount --bind /asr_egs/egs /opt/asr/kaldi/egs

验证挂载效果

# cd /opt/asr/kaldi/egs
# df -h .
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdb1      296G   42G  240G  15% /new_disk

持久化

防止机器重启挂载信息丢失。将挂载信息写入 /etc/fstab 文件,挂载永久生效。

第一种挂载方案:mount 方式挂载 写入内容

/dev/sdb2 /opt/asr/kaldi/egs  ext3 defaults 0 0

第二种方案:mount --bind 绑定式挂载写入内容

/asr_egs/egs   /opt/asr/kaldi/egs  none  bind  0 0

以上操作完成/opt/asr/kaldi/egs 目录更换文件系统。

总结

查看当前目录挂载情况

# cd dir_name
# df -l .

查看当前目录大小

# cd dir_name
# du -sh  #查看文件夹大小
# du -h  #递归查看文件夹大小

查看磁盘分区和使用大小

# fdisk -l 

查看磁盘占用空间

# df -l
或
# df -h

分区挂载目录和卸载目录

mount /dev/sdb3 /dir_name       #/dir_name原始内容不可用,新挂载目录为空
umount /dir_name        #卸载后,/dir_name原始内容都在

绑定式挂载将已经存在目录挂载到另一目录

mount --bind /some/a /else/b #目录a挂载到b,b原始内容不可用,b拥有a相同,对a修改同时b也会同步发生修改
umount /else/b #卸载挂载点a,b原始内容恢复

查看挂载

# mount

一个分区挂载载一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。对于其他操作系统建立的文件系统的挂载也是这样,卸载后,目录以前的文件都还在,不会有任何丢失.

一个分区可以挂载多个目录,但反过来一个目录只能是一个分区的挂载点

绑定式挂载 mount --bind /some/a /else/b 修改在a或者b都可以,但是执行一般在b执行。

参考

https://www.cnblogs.com/sunsky303/p/12845022.html:较详细

https://segmentfault.com/a/1190000014282921:较简洁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值