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
    • 最新
    • 标签
主页 / unix / 问题

问题[sfdisk](unix)

Martin Hope
Tango
Asked: 2023-07-19 13:55:25 +0800 CST

使用 sfdisk 将分区表从较大的设备复制到较小的设备

  • 5

我正在测试一个用于 Raspberry Pi 系统的 Python 脚本,用于重新格式化和复制分区信息和分区数据。为了从第一个设备(通常是 USB 记忆棒)获取信息,我使用:

sfdisk -d /dev/sda >sda_data.txt

然后,要将同一个表复制到目标驱动器,我使用:

sfdisk /dev/sdb <sda_data.txt

总体而言,它按预期工作,但是如果我在较小的磁盘上使用它怎么办?例如,假设 sda1 是 msdos 格式的引导分区,而 sda2 是填充驱动器其余部分的 extfs 分区。假设 /dev/sda2 上的总数据(启动命令和数据除外)约为 10GB,而 /dev/sda 为 64GB。

我的数据足够小,当我将文件从 64GB 设备复制到较小的 32GB 设备时,较小的设备上的 /dev/sdb 将有足够的空间来将所有数据存储在较小的设备上。因此,如果 sda 是 64GB,sdb 是 32GB,我仍然可以将 sda 上的所有数据复制到 sdb。

问题或问题出在较小的sdb的分区上。

当我从 sda 读取分区信息时,它包括分区大小,并且第二个分区 sda2 将比新分区 sdb2 大很多。当我在 sdb 上使用 sda_data.txt 中的信息转储时,我的经验是 sfdisk 允许 sdb 上较小的设备大小,并且不会尝试创建太大的分区 - 它会在 sdb2 上创建一个自动转到末尾的分区较小的设备。

这是我的经验。这是标准行为吗?sfdisk 是否总是将最后一个分区的大小调整为较小的设备?换句话说,我可以依靠 sfdisk 在较小的设备上创建较小的分区吗?(这是假设在 sdb 结束后没有分区启动,并且完全超出该设备上的空间。出于本次讨论的目的,我们可以假设最后一个分区可能需要减少,但它仍然会能够适合 sdb - 它只是不是全尺寸的。)

sfdisk
  • 1 个回答
  • 33 Views
Martin Hope
lylklb
Asked: 2019-03-21 07:06:34 +0800 CST

为什么partx无法读取某些磁盘的分区表

  • 2

partx无法读取/dev/sdb此系统上的分区表。为什么它返回如下所示的“读取分区表失败”,而不是null/empty?这种“失败”的结果是否总是意味着设备的分区表已损坏?

注意:这里sdb可以在没有任何分区的情况下作为LVM正常工作!

    # pvs
      PV         VG                                        Fmt  Attr PSize    PFree  
      /dev/sda3  vgroot                                    lvm2 a--    89.00g   4.00m
      /dev/sda4  vgroot                                    lvm2 a--   746.78g 746.78g
      /dev/sdb   vgdata                                    lvm2 a--  <836.99g      0 

    # 
    # 
    # sfdisk -l /dev/sdb

    Disk /dev/sdb: 109262 cylinders, 255 heads, 63 sectors/track
    # 
    #
    # sfdisk -l /dev/sda

    Disk /dev/sda: 109262 cylinders, 255 heads, 63 sectors/track
    Units: cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

       Device Boot Start     End   #cyls    #blocks   Id  System
    /dev/sda1          0+ 109262- 109263- 877647871+  ee  GPT
    sfdisk:                 start: (c,h,s) expected (0,0,2) found (0,0,1)

    /dev/sda2          0       -       0          0    0  Empty
    /dev/sda3          0       -       0          0    0  Empty
    /dev/sda4          0       -       0          0    0  Empty
    # 
    # 
    # partx -s /dev/sdb 
    partx: /dev/sdb: failed to read partition table
    # 
    # partx -s /dev/sda
    NR     START        END    SECTORS   SIZE NAME                 UUID
     1      2048     411647     409600   200M EFI System Partition 255f05dd-3c30-4eb5-b4ef-e222216eb27e
     2    411648    2508799    2097152     1G                      0eba1772-1106-4a63-bad6-6d20be988dba
     3   2508800  189171711  186662912    89G                      39fab8c9-bd96-47a2-b5db-495e43159055
     4 189171712 1755295710 1566123999 746.8G                      9e3d6237-5c7f-4443-8b60-b258052a8b32

    # 
    # 
    # pvdisplay /dev/sdb
      --- Physical volume ---
      PV Name               /dev/sdb
      VG Name               vgdata
      PV Size               836.99 GiB / not usable 2.00 MiB
      Allocatable           yes (but full)
      PE Size               4.00 MiB
      Total PE              214269
      Free PE               0
      Allocated PE          214269
      PV UUID               IsOr0G-UBTt-Qn1E-bx6R-dzvY-HqSE-bNiCaq

    # 
    # 
    # lsb_release -a
        LSB Version:    :core-4.1-amd64:core-4.1-noarch
        Distributor ID: RedHatEnterpriseServer
        Description:    Red Hat Enterprise Linux Server release 7.4 (Maipo)
        Release:        7.4
        Codename:       Maipo
    # 
    # 

另一个系统场景:

下面的partx可以不带分区直接输出null/empty,为什么?
注意:下面的sdb也可以作为LVM不带分区正常工作!

# 
# 
# partx  /dev/sdb
# 
# 
# 
# pvdisplay  /dev/sdb
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               vgdoc
  PV Size               600.00 GB / not usable 4.00 MB
  Allocatable           yes (but full)
  PE Size (KByte)       4096
  Total PE              153599
  Free PE               0
  Allocated PE          153599
  PV UUID               mMPvrE-NBP5-9n3J-77w5-57p0-1R7E-ggFCEj

# 
#  
# 
# lsb_release -a
LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Release:        5.5
Codename:       Tikanga
# 
# 

1)我的想法是,如果磁盘真的没有分区,partx 不应该以“读取失败...”退出。
注意:如您所见,partx 仅在具有非分区磁盘的另一个系统中输出 null/empty。

2)在磁盘分区上可以创建和使用PV/LVM是正常的,不是吗?

 Device Boot Start     End   #cyls    #blocks   Id  System
   /dev/sda1   *      0+     25-     26-    204800   83  Linux
   /dev/sda2         25+  36404-  36380- 292215808   8e  Linux LVM
partition sfdisk
  • 1 个回答
  • 2199 Views
Martin Hope
sourcejedi
Asked: 2018-07-23 14:52:30 +0800 CST

sfdisk - “此磁盘当前正在使用” - 但似乎没有任何东西在使用它?

  • 2
# sfdisk /dev/mmcblk0p1

Welcome to sfdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Checking that no-one is using this disk right now ... FAILED

This disk is currently in use - repartitioning is probably a bad idea.
Umount all file systems, and swapoff all swap partitions on this disk.
Use the --no-reread flag to suppress this check.

但我找不到它在哪里使用。

# grep mmc /proc/mounts
# grep mmc /proc/swaps
# lsof /dev/mmc*
# fuser /dev/mmc*

sfdisk是从util-linux 2.29.2-1+deb9u1。

# strace -f sfdisk /dev/mmcblk0p1
...
write(1, "\33[0mChanges will remain in memor"..., 115Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
) = 115
write(1, "\n", 1
)                       = 1
fstat64(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(179, 1), ...}) = 0
ioctl(3, BLKRRPART)                     = -1 EINVAL (Invalid argument)
write(1, "Checking that no-one is using th"..., 62Checking that no-one is using this disk right now ... FAILED
sfdisk
  • 1 个回答
  • 7743 Views

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve