func getLocalSSDs()

in pkg/localvolume/lssd.go [39:98]


func getLocalSSDs() ([]string, error) {
	// on n4, boot disk is /dev/sda
	// /dev/nvme0  /dev/nvme0n1  /dev/nvme0n2	/dev/nvme0n3  /dev/nvme0n4
	//
	// Also there is $ ls -l /dev/disk/by-id/google-local-ssd*
	// lrwxrwxrwx 1 root root 39 Jul 12 18:28 /dev/disk/by-id/google-local-ssd-block0 -> /dev/disk/by-id/google-local-nvme-ssd-0
	// lrwxrwxrwx 1 root root 39 Jul 12 18:28 /dev/disk/by-id/google-local-ssd-block1 -> /dev/disk/by-id/google-local-nvme-ssd-1
	// lrwxrwxrwx 1 root root 39 Jul 12 18:28 /dev/disk/by-id/google-local-ssd-block2 -> /dev/disk/by-id/google-local-nvme-ssd-2
	// lrwxrwxrwx 1 root root 39 Jul 12 18:28 /dev/disk/by-id/google-local-ssd-block3 -> /dev/disk/by-id/google-local-nvme-ssd-3
	//
	// on c3d-standard-16-lssd (which has one card)
	// /dev/nvme0    /dev/nvme0n1p1   /dev/nvme0n1p11	/dev/nvme0n1p2	/dev/nvme0n1p4	/dev/nvme0n1p6	/dev/nvme0n1p8	/dev/nvme1
	// /dev/nvme0n1  /dev/nvme0n1p10  /dev/nvme0n1p12	/dev/nvme0n1p3	/dev/nvme0n1p5	/dev/nvme0n1p7	/dev/nvme0n1p9	/dev/nvme1n1
	//
	// /dev/disk/by-id has
	// lrwxrwxrwx 1 root root 13 Jul 12 17:53 nvme-nvme_card-pd_nvme_card-pd -> ../../nvme0n1
	// lrwxrwxrwx 1 root root 13 Jul 12 17:53 nvme-nvme_card0_nvme_card0 -> ../../nvme1n1
	// lrwxrwxrwx 1 root root 13 Jul 12 17:53 nvme-nvme_card0_nvme_card0_1 -> ../../nvme1n1
	//
	// The nvme0 namespace is the boot disk.
	//
	// On a c3d-standard-60-lssd, which has 4 cards:
	//
	// /dev/disk/by-id/nvme-nvme_card0_nvme_card0    /dev/disk/by-id/nvme-nvme_card1_nvme_card1_1  /dev/disk/by-id/nvme-nvme_card3_nvme_card3
	// /dev/disk/by-id/nvme-nvme_card0_nvme_card0_1  /dev/disk/by-id/nvme-nvme_card2_nvme_card2    /dev/disk/by-id/nvme-nvme_card3_nvme_card3_1
	// /dev/disk/by-id/nvme-nvme_card1_nvme_card1    /dev/disk/by-id/nvme-nvme_card2_nvme_card2_1
	//
	// And the boot disk is nvme-nvme_card-pd*
	//
	// When attaching another hyperdisk, it appears at /dev/disk/by-id/google-persistent-disk-5 -> ../../nvme0n2
	//
	// and we have nvme-nvme_card-pd_nvme_card-pd_1 -> ../../nvme0n1, /dev/disk/by-id/nvme-nvme_card-pd_nvme_card-pd_2 -> ../../nvme0n2
	//
	// finially, there are
	// $ ls -l /dev/disk/by-id/google-local-*
	// lrwxrwxrwx 1 root root 13 Jul 12 17:58 /dev/disk/by-id/google-local-nvme-ssd-0 -> ../../nvme1n1
	// lrwxrwxrwx 1 root root 13 Jul 12 17:58 /dev/disk/by-id/google-local-nvme-ssd-1 -> ../../nvme2n1
	// lrwxrwxrwx 1 root root 13 Jul 12 17:58 /dev/disk/by-id/google-local-nvme-ssd-2 -> ../../nvme3n1
	// lrwxrwxrwx 1 root root 13 Jul 12 17:58 /dev/disk/by-id/google-local-nvme-ssd-3 -> ../../nvme4n1
	// lrwxrwxrwx 1 root root 39 Jul 12 17:58 /dev/disk/by-id/google-local-ssd-block0 -> /dev/disk/by-id/google-local-nvme-ssd-0
	// lrwxrwxrwx 1 root root 39 Jul 12 17:58 /dev/disk/by-id/google-local-ssd-block1 -> /dev/disk/by-id/google-local-nvme-ssd-1
	// lrwxrwxrwx 1 root root 39 Jul 12 17:58 /dev/disk/by-id/google-local-ssd-block2 -> /dev/disk/by-id/google-local-nvme-ssd-2
	// lrwxrwxrwx 1 root root 39 Jul 12 17:58 /dev/disk/by-id/google-local-ssd-block3 -> /dev/disk/by-id/google-local-nvme-ssd-3
	//
	// Whereas the attached disks are all google-persistent-disk-*.
	//
	// So we'll use /dev/disk/by-id/google-local-ssd-block*

	entries, err := fs.ReadDir(os.DirFS("/dev/disk"), "by-id")
	if err != nil {
		return nil, err
	}
	devices := []string{}
	for _, f := range entries {
		if strings.HasPrefix(f.Name(), "google-local-ssd-block") {
			devices = append(devices, filepath.Join("/dev/disk/by-id", f.Name()))
		}
	}
	return devices, nil
}