@@ -290,7 +290,10 @@ func (m *deviceUtils) VerifyDevicePath(devicePaths []string, deviceName string)
290290 })
291291
292292 if err != nil {
293- return "" , fmt .Errorf ("failed to find and re-link disk %s with udevadm after retrying for %v: %w" , deviceName , pollTimeout , err )
293+ klog .Warningf ("For device %s udevadmin failed: %v. Trying to manually link" , deviceName , err )
294+ if err := manuallySetDevicePath (deviceName ); err != nil {
295+ return "" , fmt .Errorf ("failed to manually set link for disk %s: %w" , deviceName , err )
296+ }
294297 }
295298
296299 return devicePath , nil
@@ -338,7 +341,7 @@ func findAvailableDevFsPaths() ([]string, error) {
338341 return append (diskSDPaths , diskNvmePaths ... ), nil
339342}
340343
341- func udevadmTriggerForDiskIfExists (deviceName string ) error {
344+ func findDevice (deviceName string ) ( string , string , error ) {
342345 devFsPathToSerial := map [string ]string {}
343346 devFsPaths , err := findAvailableDevFsPaths ()
344347 if err != nil {
@@ -355,17 +358,33 @@ func udevadmTriggerForDiskIfExists(deviceName string) error {
355358 klog .V (4 ).Infof ("device path %s, serial number %v" , devFsPath , devFsSerial )
356359 devFsPathToSerial [devFsPath ] = devFsSerial
357360 if devFsSerial == deviceName {
358- // Found the disk that we're looking for so run a trigger on it
359- // to resolve its /dev/by-id/ path
360- klog .Warningf ("udevadm --trigger running to fix disk at path %s which has serial number %s" , devFsPath , devFsSerial )
361- err := udevadmChangeToDrive (devFsPath )
362- if err != nil {
363- return fmt .Errorf ("udevadm --trigger failed to fix device path %s which has serial number %s: %w" , devFsPath , devFsSerial , err )
364- }
365- return nil
361+ return devFsPath , devFsSerial , nil
366362 }
367363 }
368- return fmt .Errorf ("udevadm --trigger requested to fix disk %s but no such disk was found in device path %v" , deviceName , devFsPathToSerial )
364+ return "" , "" , fmt .Errorf ("udevadm --trigger requested to fix disk %s but no such disk was found in device path %v" , deviceName , devFsPathToSerial )
365+ }
366+
367+ func manuallySetDevicePath (deviceName string ) error {
368+ devFsPath , devFsSerial , err := findDevice (deviceName )
369+ if err != nil {
370+ return err
371+ }
372+ return os .Symlink (devFsPath , path .Join (diskByIdPath , diskGooglePrefix + devFsSerial ))
373+ }
374+
375+ func udevadmTriggerForDiskIfExists (deviceName string ) error {
376+ devFsPath , devFsSerial , err := findDevice (deviceName )
377+ if err != nil {
378+ return err
379+ }
380+ // Found the disk that we're looking for so run a trigger on it
381+ // to resolve its /dev/by-id/ path
382+ klog .Warningf ("udevadm --trigger running to fix disk at path %s which has serial number %s" , devFsPath , devFsSerial )
383+ err := udevadmChangeToDrive (devFsPath )
384+ if err != nil {
385+ return fmt .Errorf ("udevadm --trigger failed to fix device path %s which has serial number %s: %w" , devFsPath , devFsSerial , err )
386+ }
387+ return nil
369388}
370389
371390// Calls "udevadm trigger --action=change" on the specified drive. drivePath
0 commit comments