Centos7 逻辑卷管理(LVM)

LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷轴管理员。
LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间。
LVM是用来方便管理的,不会提供额外的安全保证。

LVM 的优点

比起正常的硬盘分区管理,LVM更富于弹性:

  • 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。
  • 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
  • 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
  • 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。
  • 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。
    LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。
  • 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
  • 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。

LVM的基本组成块(building blocks)如下:

1. 物理卷Physical volume(PV):

我们实际的 partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过 pvcreate 的指令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是通过 gdisk/fdisk !

2. 卷组Volume group (VG):

所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是 LVM 组合起来的大磁盘!这么想就好了。 那么这个大磁盘最大可以到多少容量呢?这与下面要说明的 PE 以及 LVM 的格式版本有关喔~在默认的情况下, 使用 32位的 Linux 系统时,基本上 LV 最大仅能支持到 65534 个 PE 而已,若使用默认的 PE 为 4MB 的情况下, 最大容量则仅能达到约 256GB 而已~不过,这个问题在 64位的 Linux 系统上面已经不存在了!LV 几乎没有啥容量限制了!

3. 物理区域Physical extent (PE):

LVM 默认使用 4MB 的 PE 区块,而 LVM 的 LV 在 32 位系统上最多仅能含有 65534 个 PE (lvm1 的格式),因此默认的 LVM 的 LV 会有 4M*65534/(1024M/G)=256G(限于lvm1版本)。这个 PE 就有点像文件系统里面的 block 的性质一样。
在使用 lvm2 的版本中,以及系统转为 64 位,因此这个限制已经不存在了。

4. 逻辑卷Logical volume (LV):

虚拟分区,由物理区域(physical extents)组成。
最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区的东西了!那么 LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV 的设备文件名通常指定为“ /dev/vgname/lvname ”的样式!

快速操作指导步骤:

1.创建物理卷(PV)所在的分区,设置分区格式为'Linux LVM',对应的十六进制码为8e(MBR)或8e00(GPT)。
2.创建物理卷(PV)。如果你只有一个硬盘,那么你最好只创建一个分区一个物理卷;如果你有多个硬盘,你可以创建多个分区,在每个分区上分别创建一个物理卷。
3.创建卷组(VG),并把所有物理卷加进卷组。
4.在卷组上创建逻辑卷(LV)。
5.格式化逻辑卷(LV)。
6.创建挂载点儿,并挂账格式化后的 LV

具体实施:

磁盘阶段(准备 PV)

PV 可以是整块物理磁盘、物理磁盘的一个分区或者是回环文件

检查磁盘设备

可通过以下命令列出可被用作物理卷的设备:

[root@bogon ~]# lvmdiskscan 
  /dev/sda1 [     200.00 MiB] 
  /dev/sda2 [       5.00 GiB] 
  /dev/sda3 [       1.00 GiB] 
  /dev/sdb  [       8.00 GiB] 
  1 disk
  3 partitions
  0 LVM physical volume whole disks
  0 LVM physical volumes

警告: 请确认你对正确的设备进行操作,否则会导致文件丢失!

使用分区工具把分区类型改为 8e 或者 8e00,假如是整块硬盘就不用了

PV 阶段涉及到的命令

  • pvcreate :将实体 partition 创建成为 PV ;
  • pvscan : 搜寻目前系统里面任何具有 PV 的磁盘;
  • pvscan --cache: 搜寻目前系统里面任何具有 PV 的磁盘并写入到LVM缓存;
  • pvdisplay :显示出目前系统上面的 PV 状态;
  • pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性,变为普通分区。

开始创建 PV

[root@bogon ~]# pvcreate /dev/sda4
  Physical volume "/dev/sda4" successfully created.
[root@bogon ~]# pvcreate /dev/sdb
WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/sdb.
  Physical volume "/dev/sdb" successfully created.
[root@bogon ~]# pvscan
  PV /dev/sda4                      lvm2 [3.80 GiB]
  PV /dev/sdb                       lvm2 [8.00 GiB]
  Total: 2 [11.80 GiB] / in use: 0 [0   ] / in no VG: 2 [11.80 GiB]

这就分别显示每个 PV 的信息与系统所有 PV 的信息。尤其最后一行,显示的是:
整体 PV 的量 / 已经被使用到 VG 的 PV 量 / 剩余的 PV 量

显示每个 PV 更详细的信息

[root@bogon ~]# pvdisplay  /dev/sdb
  "/dev/sdb" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               WzUWaN-5wYu-x8Bu-unZA-DAb8-dPLt-FJSgsy

由于 PE 是在创建 VG 时才给予的参数,因此在这里看到的 PV 里头的 PE 都会是 0
而且也没有多余的 PE 可供分配 (allocatable)

VG 阶段

涉及到的命令

  • vgcreate :就是主要创建 VG 的指令!他的参数比较多,等一下介绍。
  • vgscan :搜寻系统上面是否有 VG 存在?
  • vgdisplay :显示目前系统上面的 VG 状态;
  • vgextend :在 VG 内增加额外的 PV ;
  • vgreduce :在 VG 内移除 PV;
  • vgchange :设置 VG 是否启动 (active),通常于当多个节点共享一个 VG 时,节点之间切换使用 VG;
  • vgremove :删除一个 VG !

创建 VG

# vgcreate [-s N[mgt]] VG名称 PV名称
选项与参数:
-s :后面接 PE 的大小 (size) ,N 是数字, 单位可以是 m, g, t (大小写均可)

VG 名称自定义,但不能太随便
下面是将 PV /dev/sdb1 分配给名称为 data的VG, 并且指定 PE 大小为 16 M

[root@bogon ~]# vgcreate -s 16M data /dev/sdb1
  Volume group "data" successfully created

查看 VG

[root@bogon ~]# vgscan
  Reading volume groups from cache.
  Found volume group "data" using metadata type lvm2
[root@bogon ~]# vgdisplay 
  --- Volume group ---
  VG Name               data
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               7.98 GiB
  PE Size               16.00 MiB
  Total PE              511
  Alloc PE / Size       0 / 0   
  Free  PE / Size       511 / 7.98 GiB
  VG UUID               qA4Z1u-CxEo-C075-n5Gv-s80d-M1qw-AYxEWK

向 VG 增加 PV

把 PV /dev/sda4 添加到 VG data中

[root@bogon ~]# vgextend data /dev/sda4
  Volume group "data" successfully extended
[root@bogon ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  data   2   0   0 wz--n- 11.78g 11.78g
[root@bogon ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sda4  data lvm2 a--  <3.80g <3.80g
  /dev/sdb1  data lvm2 a--   7.98g  7.98g

缩减 VG

也就是从 VG 内移除某PV一个或多个 PV

==要首先保证被移出的 PV 中没有数据在使用,可以通过 pvs 查看 PV 的容量使用情况来判断是否有数据使用==

==假如有需要使用 pvmove 命令把数据移动到其他的 PV中==

[root@bogon ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sda4  data lvm2 a--  <3.80g <3.80g
  /dev/sdb1  data lvm2 a--   7.98g  7.98g
[root@bogon ~]# vgreduce data /dev/sdb1
  Removed "/dev/sdb1" from volume group "data"
[root@bogon ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sda4  data lvm2 a--  <3.80g <3.80g
  /dev/sdb1       lvm2 ---  <8.00g <8.00g
[root@bogon ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  data   1   0   0 wz--n- <3.80g <3.80g

删除 VG

[root@bogon ~]# vgremove data
  Volume group "data" successfully removed
[root@bogon ~]# vgs
[root@bogon ~]# vgscan
  Reading volume groups from cache.
[root@bogon ~]# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sda4     lvm2 ---   3.80g  3.80g
  /dev/sdb1     lvm2 ---  <8.00g <8.00g

删除 VG 时,即使 VG 有 PV 存在,只要此 VG 没有在使用,就可以删除,在此 VG 中的 PV 会自动恢复到没有被分配的状态。


LV 阶段

就是从 VG 这个大的虚拟磁盘中划逻辑卷轴 LV(也就是虚拟分区),对划分出来的 LV 进行格式化后再挂载,就可以想使用普通分区一样在上面存储数据了
涉及到的命令:

  • lvcreate :创建 LV 啦!
  • lvscan :查询系统上面的 LV ;
  • lvdisplay :显示系统上面的 LV 状态啊!
  • lvextend :在 LV 里面增加容量!
  • lvreduce :在 LV 里面减少容量;
  • lvremove :删除一个 LV,就像删除一个分区!
  • lvresize :对 LV 进行容量大小的调整!
  • lvchange : 改变某一个 LV 的状态 (available/NOT available),通常用于多节点共享一个 LV 时,对 LV 的切换!

创建LV

lvcreate [-L N[mgt]] [-n LV名称] VG名称
lvcreate [-l N] [-n LV名称] VG名称
选项与参数:
-L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为一个 PE 的大小,
因此这个数量必须要是一个 PE 大小 的倍数,若不相符,系统会自行计算最相近的容量。
-l :后面可以接 PE 的“个数”,而不是容量。若要这么做,得要自行计算 PE 数。
-n :后面接的就是 LV 的名称!

[root@bogon ~]# lvscan
[root@bogon ~]# lvcreate -L 500M -n www data
  Logical volume "www" created.
[root@bogon ~]# lvscan
  ACTIVE            '/dev/data/www' [500.00 MiB] inherit
[root@bogon ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/data/www
  LV Name                www
  VG Name                data
  LV UUID                N04J4p-dhD9-LGF2-MghY-YdyU-DPiz-NB0di0
  LV Write Access        read/write
  LV Creation host, time bogon, 2019-08-22 14:59:58 +0800
  LV Status              available
  # open                 0
  LV Size                500.00 MiB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

文件系统阶段

  1. 先检查 VG 的容量
[root@bogon ~]# vgdisplay 
  --- Volume group ---
  VG Name               data
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               3.80 GiB
  PE Size               4.00 MiB
  Total PE              973
  Alloc PE / Size       125 / 500.00 MiB
  Free  PE / Size       848 / 3.31 GiB
  VG UUID               8Itb21-kqOB-3VLh-T3bL-Mmfe-jFdS-S5frRn

从上面信息看到 VG 中的容量已经本占用了一部分了,可我们并没有去使用。原因是,当在 VG 中划分 LV 时,LVM 自身会使用一些空间来保存一下信息,用于记录和管理这个 VG 和 它下面的 LV。

  1. 格式化、挂载、测试 LV
[root@bogon ~]# lvscan
  ACTIVE            '/dev/data/www' [500.00 MiB] inherit

[root@bogon ~]# mkfs.xfs /dev/data/www
meta-data=/dev/data/www          isize=512    agcount=4, agsize=32000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=128000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@bogon ~]# mkdir -p /data/www

[root@bogon ~]# mount /dev/data/www /data/www

[root@bogon ~]# df -h|sort
/dev/mapper/data-www  497M   26M  472M   6% /data/www
/dev/sda1             197M  108M   90M  55% /boot
/dev/sda2             5.0G  1.3G  3.8G  26% /
devtmpfs              966M     0  966M   0% /dev
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 196M     0  196M   0% /run/user/0
tmpfs                 976M     0  976M   0% /dev/shm
tmpfs                 976M     0  976M   0% /sys/fs/cgroup
tmpfs                 976M  8.6M  968M   1% /run

[root@bogon ~]# blkid /dev/data/www
/dev/data/www: UUID="92c04f38-60ff-4cc8-b7b5-9a42f915bfb8" TYPE="xfs" 

blkid 命令可以查看一个设备的文件系统类型,不论是否挂载均可

LVM 的扩容

当需要更多的 LV,或是在一个 LV 中需要更多的容量时,就需要对 VG 或 LV 进行扩容
由于 LV 的容量是从 VG 中划分出来的,所以不论是需要一个新的 LV, 还是需要对现有的 LV 进行扩容,都需要保证 VG 有总够多的容量。
基本流程是:

VG 阶段:

VG 需要有剩余的容量,
如果 VG 容量不足, 最简单的方法就是再加硬盘!然后将该硬盘使用上面讲过的 pvcreate 及 vgextend 增加到该 VG 内即可!

LV 阶段

向一个现有的 LV 中增加更多的可用容量:如果 VG 的剩余容量足够了, 此时就可以利用 lvresize 这个指令来将剩余容量加入到所需要增加的 LV 设备内!
新创建一个 LV:保证 VG 容量足够,直接用 lvcreate 命令创建即可。

文件系统阶段的放大:

我们的 Linux 实际使用的其实不是 LV !而是 LV 这个设备内的文件系统!
目前在 Linux 环境下,可以放大的文件系统有 XFS 以及 EXT 家族!
至于缩小仅有 EXT 家族,目前 XFS 文件系统并不支持文件系统的容量缩小喔!要注意!要注意!XFS 放大文件系统通过简单的 xfs_growfs 指令即可!

其中最后一个步骤最重要! 整个文件系统在最初格式化的时候就创建了 inode/block/superblock 等信息,要改变这些信息是很难的! 不过因为文件系统格式化的时候创建的是多个 block group ,因此我们可以通过在文件系统当中增加 block group 的方式来增减文件系统的量!而增减 block group 就是利用 xfs_growfs 啰!所以最后一步是针对文件系统来处理的, 前面几步则是针对 LVM 的实际容量大小!
因此,严格说起来,放大文件系统并不是没有进行“格式化”喔!放大文件系统时,格式化的位置在于该设备后来新增的部份,设备的前面已经存在的文件系统则没有变化。 而新增的格式化过的数据,再反馈回原本的 supberblock 这样而已!

实操

现在目标是对现有的 LV /dev/data/www的容量增加 500M,使其总容量为 1000M

  1. 检查 LV,VG
[root@bogon ~]# pvscan
  PV /dev/sda4   VG data            lvm2 [3.80 GiB / 3.31 GiB free]
  PV /dev/sdb1                      lvm2 [<8.00 GiB]
  Total: 2 [<11.80 GiB] / in use: 1 [3.80 GiB] / in no VG: 1 [<8.00 GiB]
[root@bogon ~]# vgscan
  Reading volume groups from cache.
  Found volume group "data" using metadata type lvm2
[root@bogon ~]# vgdisplay 
  --- Volume group ---
  VG Name               data
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               3.80 GiB
  PE Size               4.00 MiB
  Total PE              973
  Alloc PE / Size       125 / 500.00 MiB
  Free  PE / Size       848 / 3.31 GiB
  VG UUID               8Itb21-kqOB-3VLh-T3bL-Mmfe-jFdS-S5frRn
  1. 增加现有 LV 的容量

lvresize -L +-N[mgt] LV的设备名
lvresize -l +-PE个数 LV的设备名
选项和参数:
lvresize 的语法很简单,基本上 -l 或 -L 来增加,其他参数和 lvcreate 基本一样!
若要增加则使用 + ,若要减少则使用 - !( + 是增加多少,不加 +/- 是结果为多少)
详细的选项请参考 man lvresize

[root@bogon ~]# lvresize -L +500M /dev/data/www
  Size of logical volume data/www changed from 500.00 MiB (125 extents) to 1000.00 MiB (250 extents).
  Logical volume data/www successfully resized.
[root@bogon ~]# lvscan
  ACTIVE            '/dev/data/www' [1000.00 MiB] inherit
  1. 把扩容的 LV 容量增加到实际的文件系统中
    EXT2,3,4
[root@bogon ~]# df -h /data/www
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/data-www  477M  2.3M  445M   1% /data/www

[root@bogon ~]# resize2fs /dev/data/www
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/data/www is mounted on /data/www; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 8
The filesystem on /dev/data/www is now 1024000 blocks long.

[root@bogon ~]# df -h /data/www
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/data-www  961M  2.5M  910M   1% /data/www

XFS

[root@bogon ~]# df -h /dev/data/www
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/data-www  497M   26M  472M   6% /data/www
[root@bogon ~]# lvextend -L +500M /dev/data/www
  Size of logical volume data/www changed from 500.00 MiB (125 extents) to 1000.00 MiB (250 extents).
  Logical volume data/www successfully resized.
[root@bogon ~]# lvs
  LV   VG   Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  www  data -wi-ao---- 1000.00m                                                    
[root@bogon ~]# df -h /dev/data/www
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/data-www  497M   26M  472M   6% /data/www
[root@bogon ~]# xfs_growfs /dev/data/www
meta-data=/dev/mapper/data-www   isize=512    agcount=4, agsize=32000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=128000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 128000 to 256000
[root@bogon ~]# df -h /dev/data/www
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/data-www  997M   26M  972M   3% /data/www

LVM 的缩减

注意:
对逻辑卷缩减,是有分险的,必须做的话,应遵循以下原则

  1. 不能在线缩减,先卸载文件系统==
  2. 确保缩减后的容量,仍能存储下原有的所有数据==
  3. 在缩减之前需要先进行强制性文件系统检查,以保证文件系统处于一致性状态==

基本流程和扩展相反

  1. 卸载文件系统
  2. 强制性检查文件系统
  3. 缩减文件系统
  4. 缩减 LV
  5. 缩减 VG

可用命令

使用'lvm help <command>'获取更多信息
  config  显示和操作配置信息
  devtypes  显示已识别的内置块设备类型
  dumpconfig  显示和操作配置信息
  格式列出可用的元数据格式
  help  显示命令帮助
  fullreport  显示完整报告
  lastlog  显示最后一个命令的日志报告
  lvchange  更改逻辑卷的属性
  lvconvert  更改逻辑卷布局
  lvcreate  创建逻辑卷
  lvdisplay  显示有关逻辑卷的信息
  lvextend  为逻辑卷添加空间
  lvmchange  使用设备映射器,这是过时的,什么都不做。
  lvmconfig  显示和操作配置信息
  lvmdiskscan  列出可用作物理卷的设备
  lvmsadc  收集活动数据
  lvmsar  创建活动报告
  lvreduce  减小逻辑卷的大小
  lvremove  从系统中删除逻辑卷
  lvrename  重命名逻辑卷
  lvresize  调整逻辑卷的大小
  lvs  显示有关逻辑卷的信息
  lvscan  列出所有卷组中的所有逻辑卷
  pvchange  更改物理卷的属性
  pvresize  调整物理卷的大小
  pvck  检查物理卷的一致性
  pvcreate  初始化LVM使用的物理卷
  pvdata  显示物理卷的磁盘元数据
  pvdisplay  显示物理卷的各种属性
  pvmove  将范围从一个物理卷移动到另一个物理卷
  lvpoll  继续在逻辑卷上启动轮询操作
  pvremove  从物理卷中删除LVM标签
  pvs  显示有关物理卷的信息
  pvscan  列出所有物理卷
  segtypes  列出可用的段类型
  systemid  显示当前在此主机上设置的系统ID(如果有)
  tags  此主机上定义的列表标签
  vgcfgbackup  备份卷组配置
  vgcfgrestore  还原卷组配置
  vgchange  更改卷组属性
  vgck  检查卷组的一致性
  vgconvert  更改卷组元数据格式
  vgcreate  创建卷组
  vgdisplay  显示卷组信息
  vgexport  从系统中取消注册卷组
  vgextend  将物理卷添加到卷组
  vgimport  使用system注册导出的卷组
  vgimportclone  从克隆的PV导入VG
  vgmerge  合并卷组
  vgmknodes  在/ dev中为卷组设备创建特殊文件
  vgreduce  从卷组中删除物理卷
  vgremove  删除卷组
  vgrename  重命名卷组
  vgs  显示有关卷组的信息
  vgscan  搜索所有卷组
  vgsplit  将物理卷移动到新的或现有的卷组中
  version  显示软件和驱动程序版本信息
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容