AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1156409
Accepted
Konstantin
Konstantin
Asked: 2024-03-17 18:03:22 +0800 CST2024-03-17 18:03:22 +0800 CST 2024-03-17 18:03:22 +0800 CST

文件或目录所在的设备

  • 772

如何识别文件或目录所在的设备?

有一个统计模块。
结果中有一个“设备 inode 驻留”。

如何将“inode 所在的设备”映射到分区?

ansible
  • 2 2 个回答
  • 84 Views

2 个回答

  • Voted
  1. Best Answer
    U880D
    2024-03-17T18:55:20+08:002024-03-17T18:55:20+08:00

    首先需要了解inode的设备是什么?和命令输出中的设备号stat。

    然后,以调试输出为例

    TASK [debug] *****
    ok: [localhost] =>
      result:
        changed: false
        failed: false
        stat:
    ...
          dev: 2051
    

    有一个2051十进制的设备 ID,但我们需要十六进制的。根据如何将十进制字符串转换为十六进制字符串?像这样的任务

      - debug:
          msg: "{{ '%#x' % result.stat.dev }}"
    

    会报告

    TASK [debug] *****
    ok: [localhost] =>
      msg: '0x803'
    

    这需要分为主要 ( 8) 和次要 ( 3) 设备。也许开始于

    "{{ ('%#x' % result.stat.dev).split('x') | last }}"
    

    在其他任务中,有必要收集以下结果

    ~/test$ ls -al /dev/sd*
    brw-rw----. 1 root disk 8,  0 Feb 29 00:01 /dev/sda
    brw-rw----. 1 root disk 8,  1 Feb 29 00:01 /dev/sda1
    brw-rw----. 1 root disk 8,  2 Feb 29 00:01 /dev/sda2
    brw-rw----. 1 root disk 8,  3 Feb 29 00:01 /dev/sda3
    brw-rw----. 1 root disk 8,  4 Feb 29 00:01 /dev/sda4
    brw-rw----. 1 root disk 8,  5 Feb 29 00:01 /dev/sda5
    brw-rw----. 1 root disk 8, 16 Feb 29 00:01 /dev/sdb
    brw-rw----. 1 root disk 8, 32 Feb 29 00:01 /dev/sdc
    brw-rw----. 1 root disk 8, 33 Feb 29 00:01 /dev/sdc1
    

    并相应地解析它,因为ansible_facts.device_links ansible_facts.devices不收集和保存此类信息。

    根据lsblk --output仅针对必要信息进行格式化的基础设施可能会更容易。

    lsblk -o NAME,MAJ:MIN,MOUNTPOINT
    NAME   MAJ:MIN MOUNTPOINT
    sda      8:0
    ├─sda1   8:1   /boot/efi
    ├─sda2   8:2   /boot
    ├─sda3   8:3   /
    ├─sda4   8:4   /tmp
    └─sda5   8:5   [SWAP]
    sdb      8:16  /var/lib/pgsql/16/data
    sdc      8:32
    └─sdc1   8:33  /var
    sr0     11:0
    

    或者根据如何获取文件的设备/分区名称?只是

    cat /proc/partitions
    major minor  #blocks  name
    
      11        0    1234567 sr0
       8       32   12345678 sdc
       8       33   12345678 sdc1
       8        0  123456789 sda
       8        1     123456 sda1
       8        2     123456 sda2
       8        3   12345678 sda3
       8        4   12345678 sda4
       8        5    1234567 sda5
       8       16    1234567 sdb
    

    从这里我们可以看到Major 8 (SCSI) 和Minor 3 是/dev/sda3。以及“如何找出主设备号后面的内容? ”,请参阅示例Linux:主设备号和次设备号或分区的主设备号和次设备号。

    文本文件中的零填充字段的示例任务

      - name: Gather Custom Fact - Partition major minor numbers
        shell:
          cmd: |
            tail -n +3 /proc/partitions | awk '{ printf "%s: %02i%02i\n", $4,$1,$2 }'
        check_mode: false
        changed_when: false
        register: partmajmin
    
      - debug:
          var: (partmajmin.stdout | from_yaml)
    

    将导致输出

    TASK [debug] *********************
    ok: [localhost] =>
      (partmajmin.stdout | from_yaml):
        sda: 0800
        sda1: 0801
        sda2: 0802
        sda3: 0803
        sda4: 0804
        sda5: 0805
        sdb: 0816
        sdc: 0832
        sdc1: 0833
        sr0: 1100
    

    这些数字可以访问,也可以转换为整数,如下所示

      - debug:
          var: (partmajmin.stdout | from_yaml).sda3 | int(base=16)
    

    导致输出为

    TASK [debug] ************************************************
    ok: [localhost] =>
      (partmajmin.stdout | from_yaml).sda3 | int(base=16): '2051'
    

    最后还有一个任务

      - name: Device an inode can reside on
        debug:
          msg: "{{ item.key }}"
        loop: "{{ lookup('dict', (partmajmin.stdout | from_yaml)) }}"
        loop_control:
          label: "{{ item.value | int(base=16) }}"
    

    将报告

    TASK [Device an inode can reside on] ******
    ok: [localhost] => (item=2099) =>
      msg: sdc1
    ok: [localhost] => (item=2098) =>
      msg: sdc
    ok: [localhost] => (item=2052) =>
      msg: sda4
    ok: [localhost] => (item=1100) =>
      msg: sr0
    ok: [localhost] => (item=2053) =>
      msg: sda5
    ok: [localhost] => (item=2050) =>
      msg: sda2
    ok: [localhost] => (item=2048) =>
      msg: sda
    ok: [localhost] => (item=2070) =>
      msg: sdb
    ok: [localhost] => (item=2049) =>
      msg: sda1
    ok: [localhost] => (item=2051) =>
      msg: sda3
    
    • 0
  2. Konstantin
    2024-03-17T20:17:44+08:002024-03-17T20:17:44+08:00

    补充:对于次要号码,必须取该号码的最后两位数字


    文件:/path/to/file1
    linux 统计:device 8/1
    ansible 设备统计:dev: 2049

    2049(十二月)= 801(十六进制)--> 8。01--> 8/ 01(十六进制) = 8/ 1(十进制)


    文件:/path/to/file2
    linux 统计:device 259/2
    ansible 设备统计:dev: 66306

    66306(十进制)= 10302(十六进制)--> 103。02--> 103/ 02(十六进制) = 259/ 2(十进制)


    文件:/path/to/file3
    linux 统计:device 254/1
    ansible 设备统计:dev: 65025

    65025 (十进制) = FE01 (十六进制) --> FE. 01--> FE/ 01(十六进制) = 254/ 1(十进制)


    文件:/path/to/file4
    linux 统计:device 0/45
    ansible 设备统计:dev: 45

    45 (十进制) = 2D (十六进制) --> 0. 2D--> 0/ 2D(十六进制) = 0/ 45(十进制)

    • 0

相关问题

  • Ansible:将字符串转换为字典

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve