mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-23 23:00:19 +00:00
Format ext4 with lazy_journal_init
Skip zeroing of the journal on freshly created images. As only dynamic
PVs are supported, it is fine to assume that existingFormat == "" image
has never been mapped and written to before.
lazy_itable_init is enabled by default, passing it for consistency with
lazy_journal_init.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 9a61fa0c0a
)
This commit is contained in:
parent
4c87c5712b
commit
1a81316ca7
@ -310,25 +310,38 @@ func getLegacyVolumeName(mountPath string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ns *NodeServer) mountVolumeToStagePath(ctx context.Context, req *csi.NodeStageVolumeRequest, stagingPath, devicePath string) error {
|
func (ns *NodeServer) mountVolumeToStagePath(ctx context.Context, req *csi.NodeStageVolumeRequest, stagingPath, devicePath string) error {
|
||||||
// Publish Path
|
|
||||||
fsType := req.GetVolumeCapability().GetMount().GetFsType()
|
fsType := req.GetVolumeCapability().GetMount().GetFsType()
|
||||||
diskMounter := &mount.SafeFormatAndMount{Interface: ns.mounter, Exec: mount.NewOsExec()}
|
diskMounter := &mount.SafeFormatAndMount{Interface: ns.mounter, Exec: mount.NewOsExec()}
|
||||||
|
|
||||||
|
// rbd images are thin-provisioned and return zeros for unwritten areas. A freshly created
|
||||||
|
// image will not benefit from discard and we also want to avoid as much unnecessary zeroing
|
||||||
|
// as possible. Open-code mkfs here because FormatAndMount() doesn't accept custom mkfs
|
||||||
|
// options.
|
||||||
|
//
|
||||||
|
// Note that "freshly" is very important here. While discard is more of a nice to have,
|
||||||
|
// lazy_journal_init=1 is plain unsafe if the image has been written to before and hasn't
|
||||||
|
// been zeroed afterwards (unlike the name suggests, it leaves the journal completely
|
||||||
|
// uninitialized and carries a risk until the journal is overwritten and wraps around for
|
||||||
|
// the first time).
|
||||||
existingFormat, err := diskMounter.GetDiskFormat(devicePath)
|
existingFormat, err := diskMounter.GetDiskFormat(devicePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Errorf(util.Log(ctx, "failed to get disk format for path %s, error: %v"), devicePath, err)
|
klog.Errorf(util.Log(ctx, "failed to get disk format for path %s, error: %v"), devicePath, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if existingFormat == "" && (fsType == "ext4" || fsType == "xfs") {
|
// TODO: update this when adding support for static (pre-provisioned) PVs
|
||||||
|
if existingFormat == "" /* && !staticVol */ {
|
||||||
args := []string{}
|
args := []string{}
|
||||||
if fsType == "ext4" {
|
if fsType == "ext4" {
|
||||||
args = []string{"-m0", "-Enodiscard", devicePath}
|
args = []string{"-m0", "-Enodiscard,lazy_itable_init=1,lazy_journal_init=1", devicePath}
|
||||||
} else if fsType == "xfs" {
|
} else if fsType == "xfs" {
|
||||||
args = []string{"-K", devicePath}
|
args = []string{"-K", devicePath}
|
||||||
}
|
}
|
||||||
_, err = diskMounter.Exec.Run("mkfs."+fsType, args...)
|
if len(args) > 0 {
|
||||||
if err != nil {
|
_, err = diskMounter.Exec.Run("mkfs."+fsType, args...)
|
||||||
klog.Errorf(util.Log(ctx, "failed to run mkfs, error: %v"), err)
|
if err != nil {
|
||||||
return err
|
klog.Errorf(util.Log(ctx, "failed to run mkfs, error: %v"), err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user