我正在编写一个库来提取有关Windows系统(XP或更高版本)上的物理磁盘,分区和卷的信息.
我正在努力获得音量.以下是我所知道的方法以及每个方法失败的原因:
GetDiskFreeSpaceEx - 受用户配额影响.IOCTL_DISK_GET_DRIVE_GEOMETRY_EX - 获取整个物理磁盘的大小,即使使用卷句柄调用也是如此.IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS - 不考虑RAID开销.IOCTL_DISK_GET_LENGTH_INFO - 拒绝访问失败.(实际上,它需要GENERIC_READ访问,与所有其他查询不同,并且GENERIC_READ需要管理员访问权限.)IOCTL_STORAGE_READ_CAPACITY- 在XP上不可用,也有IOCTL_DISK_GET_LENGTH_INFO和的缺点IOCTL_DISK_GET_DRIVE_GEOMETRY_EXFSCTL_GET_VOLUME_BITMAP+ GetFreeDiskSpace对于簇大小 - 需要GENERIC_READ(管理员访问)并给出文件系统的数据区域的大小,而不是整个卷.IOCTL_DISK_GET_PARTITION_INFO- 需要GENERIC_READ(管理员访问权限)并且在连接USB的磁盘上也失败(可能使用超级软盘分区)奇怪的是,来自FSCTL_GET_VOLUME_BITMAP和WMI CIM_LogicalDisk.Size属性的集群数量一致,并且两者都比来自的值小4096字节IOCTL_DISK_GET_LENGTH_INFO.
获得容量的正确方法是什么?由于所有其他查询在没有管理员访问权限的情况下工作,我也在寻找最少权限的解决方案.
我的系统有两个分区:
/mnt/eda,我想用于Docker容器运行我需要启动多个Docker容器,它们在启动后将占用超过10G的额外磁盘空间.我希望他们使用磁盘空间格式/mnt/eda,但我该怎么做?
目前,每当我导入或运行容器时,我的主分区都会占用空间.我尝试下载二进制文件并从侧面分区启动它,但主分区的空间仍在用完.
我无法将驱动器连接/装载到我的容器 - 为了安全起见,它们必须与主机完全分开.
所以,我有一个来自CnMemory的8GB SDHC.我用它来做我的Raspberry Pi.它到目前为止工作.但后来我的覆盆子冻结了(无法通过ssh连接,apache也没有回应).所以我把力量拉了出来.我重新启动了覆盆子.这次是我的显示器.FS似乎腐败了.我做了fsck并解决了问题.重新启动shutdown -r.现在它根本不会开始.好的,所以我想我需要为它添加一个空白的新图像.
我不能.GParted告诉我,该卡只有1GB而不是8GB.
# fsck /dev/mmcblk0
fsck from util-linux 2.20.1
e2fsck 1.42.8 (20-Jun-2013)
ext2fs_open2: Bad magic number in super-block
fsck.ext2: Superblock invalid, trying backup blocks...
fsck.ext2: Bad magic number in super-block while trying to open /dev/mmcblk0
The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and …Run Code Online (Sandbox Code Playgroud) 我的分区/ tmp已满......并且它同时为空.分区已满.检查目录:
# du -sh /tmp 28K /tmp
什么?它是空的......它真的是空的......只有两个空目录位于/ tmp中
检查分区细节:
# df -h Filesystem Size Used Avail Use% Mounted on /dev/cciss/c0d0p9 1012M 961M 0 100% /tmp
它已经满了!但为什么使用+可用!=尺寸?
检查Inode:
# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/cciss/c0d0p9 131616 17 131599 1% /tmp
那么这里发生了什么?
我正在检测我们的专有USB设备何时连接到PC.当我们检测到这个时,我们得到相关的Win32_PnPEntity.我们希望使用此Win32_PnPEntity作为以下信息的来源:
- USB描述符VID,PID,REV,固件版本.
- 逻辑磁盘驱动器卷和分区信息以获取驱动器号信息.
我遇到的问题是试图弄清楚如何使用WMI和WMQ从Win32_PnPEntity获取逻辑磁盘和分区信息.该Win32_PnPEntity是服务类型USBSTOR(USB存储怎么想吗?)
以下是我目前正在进行的流程的描述:
我使用事件监视器监听Win32_USBControllerDevice,以便检测USB设备何时连接或从PC上分离.我使用以下查询来约束事件中发生的事情:
"SELECT*FROM
__InstanceOperationEvent WITHIN 1 WHERE TargetInstance
ISA'Win32_USBControllerDevice'和
TargetInstance .__ RELPATH LIKE'%DeviceId =%VID_1111%'"
当这个事件发生时我拉出" Win32_USBControllerDevice.Dependent "属性并拉出" DeviceId "值.然后,我使用Win32_PNPEntity类的" DeviceId "值来获取关联的实例.
对我来说,事情变得棘手......
我需要去的Win32_DiskDrive的Win32_PnPEntity实例涉及.我需要这个实例以获取卷信息,因此我可以获取每个分区的驱动器号.但我不知道如何达到它.
我经历了这个过程,因为Win32_PnPEntity提供了VID,PID用于事件监听和搜索的约束......但它也提供了我需要的固件版本.所以从这个角度我想要得到的Win32_DiskDrive为Win32_PnPEntity.
任何输入将不胜感激.
---提供更好的信息描述问题:
到目前为止我已经完成的步骤如下:
- 收听'__InstanceModificaitionEvent'获取'Win32_USBControllerDevice'
- 从'__InstanceModificaitionEvent'的'TargetInstnace' 获取'Win32_PnPEntity' - 从'Win32_PnPEntity
获取'DeviceId' '包含PID,VID信息.
我现在的问题是试图找到'Win32_LogicalDisk'和/或'Win32_DiskDrive'和/或'Win32_DiskPartition'或其他一些ASSOCIATOR或REFERENCES链接到USB设备附加的驱动器号已被分配给'Mass Storge'实例.
我可以想到这个问题的最佳方式在下面的"图表"中描述:
USB DEVICE
| |
----------| |----
| Win32_DiskDrive | …Run Code Online (Sandbox Code Playgroud) 我想创建一个多平台实用程序来格式化/擦除记忆棒,磁盘等.
是否可以在Java中执行此操作?或者我是否需要为每个操作系统平台调用本机方法?
我在SD卡上安装了linux,我用这个命令来安装rootfs
tar xpjf rootfs.tar.bz -C/mnt/rootfs /
现在,我对rootfs进行了一些更改,我想创建一个备份,我可以使用上面的相同命令,我尝试使用:
tar cpjf rootfs.tar.bz2 /mnt/rootfs
and
tar cpjf rootfs.tar.bz2 -C / mnt/rootfs
I also tried
tar cpjf rootfs.tar.bz2 /mnt/rootfs/*
Run Code Online (Sandbox Code Playgroud)
并试过:
cd /mnt/rootfs
tar -cvpjf rootfs.tar.bz2 --exclude=/rootfs.tar.bz2 .
tar: ./rootfs.tar.bz2: file changed as we read it
Run Code Online (Sandbox Code Playgroud)
但我最终得到的档案在文件系统之前有两个级别,即mnt/rootfs/files我做错了什么?
我正在为Bash for Linux系统编写脚本.如何以健壮的方式检查磁盘的分区?
我可以使用grep,awk或sed从解析输出fdisk,sfdisk等等,但是这似乎并没有成为一门精确的科学.
我还可以检查是否存在分区/dev,但是分区也可能存在并且尚未被探测(partprobe例如,通过).
你会推荐什么?
默认图像有10GB,但我需要更多(约30GB).如果我使用其中一个默认图像创建一个30GB的磁盘,可用空间为10GB,而不是30GB.我知道我可以使用像debootstrap这样的工具安装发行版,但这似乎不必要地复杂化.还有其他办法吗?
我有一台配置了多个磁盘的服务器.一个用于OS,一个用于程序等,其余的将安装到空的NTFS文件夹.
Disk 0: C:
Disk 1: G:
Disk 2: G:\Folder01\
Disk 3: G:\Folder02\
Run Code Online (Sandbox Code Playgroud)
这通过GUI非常简单:https://technet.microsoft.com/en-us/library/cc753321.aspx
但是,我需要自动化,所以我需要弄清楚如何使用PowerShell执行此操作.我遇到了几个死胡同:
我以为我在Get-Disk,Initialize-Disk和New-Partition方面取得了一些进展
$Disk = Get-Disk 2
$Disk | Initialize-Disk -PartitionStyle MBR
$Disk | New-Partition -UseMaximumSize -MbrType IFS
$Partition = Get-Partition -DiskNumber $Disk.Number
Run Code Online (Sandbox Code Playgroud)
从这里,我希望做的事情如下:
New-Volume $Partition -FriendlyName Folder01 -AccessPath F:\Folder01 -FileSystem NTFS
Run Code Online (Sandbox Code Playgroud)
但这并没有产生任何输出,我注意到在我创建分区之前,它也创建了一个卷.
我认为New-Volume可能是错误的命令,因为帮助表明输入对象应该是MSFT_StoragePool对象.
我尝试使用以下命令进行一些操作:Get-PhysicalDisk,New-StoragePool,Get-StoragePool
$Disk = Get-PhysicalDisk -FriendlyName PhysicalDisk2
New-StoragePool -FriendlyName Pool2 -StorageSubsystemFriendlyName "Storage Spaces*" -PhysicalDisks $Disk
$Pool = Get-StoragePool …Run Code Online (Sandbox Code Playgroud) powershell disk-partitioning windows-server-2012 windows-server-2012-r2