summarylogtreecommitdiffstats
path: root/uuid-change
blob: 1e355fc2af64b069781f8ee1edb96b31c1cfd659 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
# Simona Pisano - 2018-11-18
# simona-scripts
# Libertamente utilizzabile sotto GPL v3

if [[ $1 == "-h" || $1 == "--help" ]] ; then
  cat << EOF
uuid-change command help

If no new uuid is suppplied the command show only 'lsblk -f' output.

Usage
  uuid-change [--help|-h]
  uuid-change [--version]
  uuud-change [device (no /dev prefix required)]
  uuud-change [device (no /dev prefix required)] [new_uuid]

Optional parameters
  --help -h              -> this help page
  --versione             -> version
  -y --ask-confirm       -> ask confirm before proceeed
  --force-yes            -> required to change parameter for fat32 (very dangerous)

EOF

  exit 0
elseif [[ $1 == "--version" ]]
  echo "uuid-change Version 0.0 (simonascripts package)"
  exit 0
fi

[[ $1 != "" ]] && device=$1 || { echo "Please insert device (no prefix '/dev/' required) as first command parameter!!"; exit 0; }
[[ $2 != "" ]] && new_uuid=$2 || new_uuid=""

flagAskConfirm=false
flagForceYes=false
while [ $# -ne 0 ] ; do
  case $1 in
    -y|--ask-confirm) flagAskConfirm=true ;;
    --force-yes) flagForceYes=true ;;
    *) ;;
  esac
  shift
done

[[ ! -r /bin/lsblk ]] && { echo "[ERR] Equired command 'lsblk' not found!! Can't operate. Sorry."; exit 1; }
[[ ! -r /bin/awk ]] && { echo "[ERR] Equired command 'awk' not found!! Can't operate. Sorry."; exit 1; }

#add /dev prefix
if [[ ${device:0:1} == "/" ]] ; then
  if [[ ${device:0:5} != "/dev/" ]] ; then
    echo "[ERR] Only /dev prefix is accempted as device name. Sorry."
    exit 1
  fi
else
  device="/dev/$device"
fi

echo "device=$device" #debug

echo "--------------------  This is the file system interested from command ------------------------"
lsblk -f $device
[[ $? -ne 0 ]] && { echo "[ERR] No device '$device' found!!!"; exit 1; } #fail
echo "----------------------------------------------------------------------------------------------"

[[ $new_uuid == "" ]] && { echo "New uuid not supplyed. Stop here. Bye."; exit 0; }

filesystem=` lsblk -f -n $device | awk '{ print $2 }' `
old_uuid=` lsblk -f -n $device | awk '{ print $4 }' `

echo "Now changing device <$device> (file system detected <$filesystem>) old <$old_uuid> to new uuid <$new_uuid>..."

if [[ "$flagAskConfirm" == true ]] ; then
  echo -n "Continue? (Y/N): "; read ok
  [[ ! $ok =~ ^(yes|y|YES|y|s|S|si|SI|sì)$ ]] && { echo "Exit forced by user."; exit 0; }
fi

if [[ $filesystem == "vfat" ]] ; then
  echo -n "This is FAT32 file system. Command change UUID but also reset entire volume content. Are you sure to procede (Y/N): "
  read ok
  [[ ! $ok =~ ^(yes|y|YES|y|s|S|si|SI|sì)$ ]] && { echo "Secure exit forced by user."; exit 0; }
fi

[[ "$flagForceYes" == false && $filesystem == "vfat" ]] && { echo "Too dangerous: specify --force-yes as parameter."; exit 1; }

case $filesystem in
  ext4)
    ;; [[ -r /bin/tune2fs ]] && sudo tune2fs -U $new_uuid $device || { echo "[ERR] 'tune2fs' not found!"; exit 1; } ;;
  ntfs)
    ;; [[ -r /bin/ntfslabel ]] && sudo ntfslabel --new-serial=$new_uuid $device || { echo "[ERR] 'tune2fs' not found!"; exit 1; } ;;
  vfat)
    ;; [[ -r /bin/mkdosfs ]] && sudo mkdosfs -i $new_uid $device || { echo "[ERR] 'mkdosfs' not found!"; exit 1; } ;;
  btrfs)
    ;; [[ -r /bin/btrfstune ]] && sudo btrfstune -U $new_uuid $device || { echo "[ERR] 'btrfstune' not found!"; exit 1; } ;;
  swap) echo "Swap file... nonsense"; exit 1 ;;
  *) echo "Unsupported file system"; exit 1 ;;
esac

[[ $? -ne 0 ]] && { echo "[ERR] Fail uuid change cmd!"; exit 1; } #fail
exit 0;