mdadm.init 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/bin/sh /etc/rc.common
  2. START=13
  3. STOP=98
  4. USE_PROCD=1
  5. PROG=/sbin/mdadm
  6. NAME=mdadm
  7. CONF="/var/etc/mdadm.conf"
  8. append_list_item() {
  9. append "$2" "$1" "$3"
  10. }
  11. append_option() {
  12. local var="$1"
  13. local cfg="$2"
  14. local opt="$3"
  15. local name="$4"
  16. local sep="$5"
  17. local str
  18. if [ -n "$sep" ]; then
  19. config_list_foreach "$cfg" "$opt" append_list_item str "$sep"
  20. else
  21. config_get str "$cfg" "$opt"
  22. fi
  23. [ -n "$str" ] && append "$var" $(printf "%s=%s" "${name:-${opt//_/-}}" "$str")
  24. }
  25. mdadm_common() {
  26. local cfg="$1"
  27. local email devices
  28. if [ -x /sbin/sendmail ]; then
  29. append_option email "$cfg" email "MAILADDR"
  30. fi
  31. append_option devices "$cfg" devices DEVICE " "
  32. printf "%s\n%s\n" "$email" "$devices" >> $CONF
  33. }
  34. mdadm_array() {
  35. local cfg="$1"
  36. local uuid device devices name array
  37. config_get uuid "$cfg" uuid
  38. config_get name "$cfg" name
  39. config_get device "$cfg" device
  40. if [ -z "$device" ] || [ -z "$uuid$name" ]; then
  41. echo "Skipping array without device, uuid or name" >&2
  42. return
  43. fi
  44. [ -n "$uuid" ] && append array "uuid=$uuid"
  45. [ -n "$name" ] && append array "name=$name"
  46. append_option array "$cfg" super_minor
  47. append_option array "$cfg" spares
  48. append_option array "$cfg" spare_group
  49. append_option array "$cfg" bitmap
  50. append_option array "$cfg" container
  51. append_option array "$cfg" member
  52. append_option array "$cfg" devices devices ","
  53. printf "ARRAY %s %s\n" "$device" "$array" >> $CONF
  54. }
  55. start_service() {
  56. local email
  57. mkdir -p "${CONF%/*}"
  58. printf "# Autogenerated from /etc/config/mdadm, do not edit!\n" > $CONF
  59. config_load mdadm
  60. config_foreach mdadm_common mdadm
  61. config_foreach mdadm_array array
  62. $PROG --assemble --scan --config="$CONF"
  63. procd_open_instance
  64. procd_set_param command "$PROG" --monitor --syslog --scan --config="$CONF"
  65. procd_close_instance
  66. }
  67. stop_service() {
  68. $PROG --stop --scan
  69. }