0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mac 独り言(1) /dev/diskNN

Posted at

/dev/diskNNだけを取り出したい

% ls /dev/disk[0-9]*
/dev/disk0      /dev/disk1s1    /dev/disk3s1    /dev/disk4s1    /dev/disk7s3
/dev/disk0s1    /dev/disk1s2    /dev/disk3s1s1  /dev/disk5      /dev/disk8
/dev/disk0s2    /dev/disk1s3    /dev/disk3s2    /dev/disk5s1    /dev/disk8s1
/dev/disk0s3    /dev/disk1s4    /dev/disk3s3    /dev/disk6      /dev/disk9
/dev/disk1      /dev/disk2      /dev/disk3s4    /dev/disk6s1    /dev/disk9s1
/dev/disk10     /dev/disk2s1    /dev/disk3s5    /dev/disk7
/dev/disk11     /dev/disk2s2    /dev/disk3s6    /dev/disk7s1
/dev/disk11s1   /dev/disk3      /dev/disk4      /dev/disk7s2

/dev/diskXsYも付いてきてしまう
シェルのワイルドカード指定だけでは無理そうなので、grepの力を借りる

% ls /dev/disk* | grep -v 's[0-9]'
/dev/disk0
/dev/disk1
/dev/disk10
/dev/disk11
/dev/disk2
/dev/disk3
/dev/disk4
/dev/disk5
/dev/disk6
/dev/disk7
/dev/disk8
/dev/disk9

取れてはいるが、並びが気に入らないから ソートする

% ls /dev/disk* | grep -v 's[0-9]' | sort -V
/dev/disk0
/dev/disk1
/dev/disk2
/dev/disk3
/dev/disk4
/dev/disk5
/dev/disk6
/dev/disk7
/dev/disk8
/dev/disk9
/dev/disk10
/dev/disk11

取れたが、
ホントは、物理ディスクだけ取り出したい

lsでは無理だからdiskutilを使う(最初から知ってたろ!!)

$ diskutil list | grep 'physical' | cut -d' ' -f1
/dev/disk0
/dev/disk6
/dev/disk7

3つ取れた。PC構成と一致している


マウントしているボリュームのリストは、次のSwiftコードでも取得できる

MountedVolumes.swift
import Cocoa
if let session = DASessionCreate(kCFAllocatorDefault) {
    if let mountedVolumeURLs = FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil) {
        print("Whole Device \tVolume Device \tVolume Path")
        let result = mountedVolumeURLs.compactMap { volumeURL in
            if let disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, volumeURL as CFURL), let bsdName = DADiskGetBSDName(disk), 
                    let wholeDisk = DADiskCopyWholeDisk(disk), let wholeName = DADiskGetBSDName(wholeDisk) {
                "/dev/\(String(cString: wholeName))\t/dev/\(String(cString: bsdName))\t\(volumeURL.path)"
            } else { nil }
        }
        print(result.sorted { $0.compare($1, options: .numeric) == .orderedAscending }.joined(separator: "\n"))
    } else {
        print("No Found Volumes.")
    }
}
実行
% swift MountedVolumes.swift
Whole Disk      Volume Device   Volume Path
/dev/disk1      /dev/disk1s1    /System/Volumes/iSCPreboot
/dev/disk1      /dev/disk1s2    /System/Volumes/xarts
/dev/disk1      /dev/disk1s3    /System/Volumes/Hardware
/dev/disk3      /dev/disk3s1s1  /
/dev/disk3      /dev/disk3s2    /System/Volumes/Preboot
/dev/disk3      /dev/disk3s4    /System/Volumes/Update
/dev/disk3      /dev/disk3s6    /System/Volumes/VM
/dev/disk5      /dev/disk5s1    /Library/Developer/CoreSimulator/Volumes/iOS_23B80
/dev/disk6      /dev/disk6s1    /Volumes/RTL9210B
/dev/disk8      /dev/disk8s1    /Volumes/WD-BLACK-2
/dev/disk9      /dev/disk9s1    /Volumes/WD-BLACK-1
/dev/disk11 	/dev/disk11s1  	/Volumes/Backup of Mac-mini-M4pro
%

論理Diskは取れた。物理Diskの取り方が知りたい・・・

つづく。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?