Paramiko exec_command 不使用 mkfs?

Paramiko exec_command not working with mkfs?

使用 Paramiko 执行以下 bash 时出现一些问题:

def format_disk(self, device, size, dformat, mount, name):
        stdin_, stdout_, stderr_ = self.client.exec_command(f"pvcreate {device};" \
        f"vgcreate {name}-vg {device};" \
        f"lvcreate -L {size} --name {name}-lv {name}-vg;" \
        f"mkfs.{dformat} /dev/{name}-vg/{name}-lv;" \
        f"mkdir {mount};" \
        f"echo '/dev/{name}-vg/{name}-lv {mount} {dformat} defaults 0 0' >> /etc/fstab")
        print(f"mkfs.{dformat} /dev/{name}-vg/{name}-lv;")

打印语句输出:mkfs.ext4 /dev/first_try-vg/first_try-lv;如果我将这个确切的命令复制并粘贴到服务器上,则没有错误,并且它会按预期格式化磁盘。

故障排除步骤

运行宁python脚本之前的服务器:

ls: cannot access /first_try: No such file or directory
[root@localhost ~]# vgs
[root@localhost ~]# lvs
[root@localhost ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Feb 25 07:32:51 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=38b7e96a-71e5-4089-a348-bd23828f9dc8 /                       xfs     defaults        0 0
UUID=72fd2a6a-85db-4596-9fc2-6604d0d865a3 /boot                   xfs     defaults        0 0

运行宁python脚本后的服务器:

[root@localhost ~]# ls /first_try/
[root@localhost ~]# vgs
  VG           #PV #LV #SN Attr   VSize   VFree  
  first_try-vg   1   1   0 wz--n- <20.00g <15.00g
[root@localhost ~]# lvs
  LV           VG           Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  first_try-lv first_try-vg -wi-a----- 5.00g                                                    
[root@localhost ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Feb 25 07:32:51 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=38b7e96a-71e5-4089-a348-bd23828f9dc8 /                       xfs     defaults        0 0
UUID=72fd2a6a-85db-4596-9fc2-6604d0d865a3 /boot                   xfs     defaults        0 0
/dev/first_try-vg/first_try-lv /first_try ext4 defaults 0 0
[root@localhost ~]# mount -a
mount: wrong fs type, bad option, bad superblock on /dev/mapper/first_try--vg-first_try--lv,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

mount -a的错误表示磁盘未格式化。 如果我手动格式化磁盘并且 运行 mount -a 它有效。

示例:

[root@localhost ~]# mkfs.ext4 /dev/first_try-vg/first_try-lv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): mdone
Writing superblocks and filesystem accounting information: done 

[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem                               Size  Used Avail Use% Mounted on
/dev/sda3                                 18G  4.7G   14G  27% /
devtmpfs                                 471M     0  471M   0% /dev
tmpfs                                    487M     0  487M   0% /dev/shm
tmpfs                                    487M  8.4M  478M   2% /run
tmpfs                                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda1                                297M  147M  151M  50% /boot
tmpfs                                     98M   12K   98M   1% /run/user/42
tmpfs                                     98M     0   98M   0% /run/user/0
/dev/mapper/first_try--vg-first_try--lv  4.8G   20M  4.6G   1% /first_try

Pariminko 无法处理来自 mkfs 的输出。我更改了命令以使用 -q 安静标志,并且能够成功地将脚本获取到 运行。

新命令mkfs -q -t {dformat} /dev/{name}-vg/{name}-lv