nfs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. # NFS filesystem mounting -*- shell-script -*-
  2. # FIXME This needs error checking
  3. nfs_top()
  4. {
  5. if [ "${nfs_top_used}" != "yes" ]; then
  6. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top"
  7. run_scripts /scripts/nfs-top
  8. [ "$quiet" != "y" ] && log_end_msg
  9. fi
  10. nfs_top_used=yes
  11. }
  12. nfs_premount()
  13. {
  14. if [ "${nfs_premount_used}" != "yes" ]; then
  15. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount"
  16. run_scripts /scripts/nfs-premount
  17. [ "$quiet" != "y" ] && log_end_msg
  18. fi
  19. nfs_premount_used=yes
  20. }
  21. nfs_bottom()
  22. {
  23. if [ "${nfs_premount_used}" = "yes" ] || [ "${nfs_top_used}" = "yes" ]; then
  24. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom"
  25. run_scripts /scripts/nfs-bottom
  26. [ "$quiet" != "y" ] && log_end_msg
  27. fi
  28. nfs_premount_used=no
  29. nfs_top_used=no
  30. }
  31. # parse nfs bootargs and mount nfs
  32. nfs_mount_root_impl()
  33. {
  34. configure_networking
  35. # get nfs root from dhcp
  36. if [ "x${NFSROOT}" = "xauto" ]; then
  37. # check if server ip is part of dhcp root-path
  38. if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
  39. NFSROOT=${ROOTSERVER}:${ROOTPATH}
  40. else
  41. NFSROOT=${ROOTPATH}
  42. fi
  43. # nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
  44. elif [ -n "${NFSROOT}" ]; then
  45. # nfs options are an optional arg
  46. if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
  47. NFSOPTS="-o ${NFSROOT#*,}"
  48. fi
  49. NFSROOT=${NFSROOT%%,*}
  50. if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
  51. NFSROOT=${ROOTSERVER}:${NFSROOT}
  52. fi
  53. fi
  54. if [ -z "${NFSOPTS}" ]; then
  55. NFSOPTS="-o retrans=10"
  56. fi
  57. nfs_premount
  58. if [ ${readonly} = y ]; then
  59. roflag="-o ro"
  60. else
  61. roflag="-o rw"
  62. fi
  63. nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
  64. }
  65. # NFS root mounting
  66. nfs_mount_root()
  67. {
  68. nfs_top
  69. modprobe nfs
  70. # For DHCP
  71. modprobe af_packet
  72. wait_for_udev 10
  73. # Default delay is around 180s
  74. delay=${ROOTDELAY:-180}
  75. # loop until nfsmount succeeds
  76. nfs_mount_root_impl
  77. ret=$?
  78. nfs_retry_count=0
  79. while [ ${nfs_retry_count} -lt ${delay} ] \
  80. && [ $ret -ne 0 ] ; do
  81. [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount"
  82. /bin/sleep 1
  83. nfs_mount_root_impl
  84. ret=$?
  85. nfs_retry_count=$(( ${nfs_retry_count} + 1 ))
  86. [ "$quiet" != "y" ] && log_end_msg
  87. done
  88. }
  89. nfs_mount_fs_impl()
  90. {
  91. configure_networking
  92. if [ -z "${NFSOPTS}" ]; then
  93. NFSOPTS="-o retrans=10"
  94. fi
  95. nfs_premount
  96. if [ ${readonly} = y ]; then
  97. roflag="-o ro"
  98. else
  99. roflag="-o rw"
  100. fi
  101. read_fstab_entry "$1"
  102. nfsmount ${roflag} ${NFSOPTS} -o "${MNT_OPTS}" "$MNT_FSNAME" "${rootmnt}${MNT_DIR}"
  103. }
  104. nfs_mount_fs()
  105. {
  106. nfs_top
  107. modprobe nfs
  108. # For DHCP
  109. modprobe af_packet
  110. wait_for_udev 10
  111. # Default delay is around 180s
  112. delay=${ROOTDELAY:-180}
  113. # Don't loop here; we can't sanely check if it worked like for
  114. # the rootfs or /etc.
  115. nfs_mount_fs_impl "$1"
  116. }
  117. mountroot()
  118. {
  119. nfs_mount_root
  120. }
  121. mount_top()
  122. {
  123. # Note, also called directly in case it's overridden.
  124. nfs_top
  125. }
  126. mount_premount()
  127. {
  128. # Note, also called directly in case it's overridden.
  129. nfs_premount
  130. }
  131. mount_bottom()
  132. {
  133. # Note, also called directly in case it's overridden.
  134. nfs_bottom
  135. }